SHARE
TWEET

Untitled

a guest Oct 21st, 2019 68 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. structure Tests =
  2. struct
  3.  
  4.   type point = int * int
  5.   type box = (int * int) * (int * int)
  6.  
  7.     fun rng s = ((s * 991) + 1) mod 5711
  8.  
  9.     structure Seq = ArraySequence
  10.  
  11.     (*Tweak these numbers*)
  12.     val seed = 15210       (*Seed for RNG*)
  13.     val points=10          (*Number of points*)
  14.     val pointRange = 20    (*x and y coordinates will come from range*)
  15.     val pointBias=10       (*Range is [0-pointBias,pointRange-pointBias)*)
  16.     val weightRange = 100  
  17.     val bias = 50          (*Generated weight is from [0-bias,weightRange-bias) *)
  18.     val tests = 100000     (*Number of tests run*)
  19.  
  20.     fun nums n = Seq.tabulate(fn i=>i-pointBias)(pointRange)
  21.  
  22.     fun shuffle S 0 s = (S,s)
  23.       | shuffle S i s =
  24.         let
  25.             val s' = rng s
  26.             val ind = s' mod i
  27.             val v = Seq.nth(S)(i-1)
  28.             val S' = Seq.update(S,(i-1,Seq.nth(S)(ind)))
  29.             val S'' = Seq.update(S',(ind,v))
  30.         in
  31.             shuffle S'' (i-1) s'
  32.         end
  33.  
  34.     fun randW(s) =
  35.         let
  36.             val s' = rng s
  37.         in
  38.             ((s' mod weightRange) - bias,s')
  39.         end
  40.  
  41.     fun genPoints xl yl 0 s = ([],s)
  42.       | genPoints [] _ _ _ = raise Fail "List empty"
  43.       | genPoints _ [] _ _ = raise Fail "List empty"
  44.       | genPoints (x::xl) (y::yl) i s =
  45.                 let
  46.                     val (w,s') = randW(s)
  47.                     val (L,s'') = genPoints xl yl (i-1) s'
  48.                 in
  49.                     (((x,y),w)::L,s'')
  50.                 end
  51.    
  52.     fun genBox s =
  53.         let
  54.             val s1 = rng s
  55.             val x1 = (s1 mod (pointRange+3))-pointBias-1
  56.             val s2 = rng s1
  57.             val y1 = (s2 mod (pointRange+3))-pointBias-1
  58.             val s3 = rng s2
  59.             val x2 = (s3 mod (pointRange+3))-pointBias-1
  60.             val s4 = rng s3
  61.             val y2 = (s4 mod (pointRange+3))-pointBias-1
  62.             val s5 = rng s4
  63.         in
  64.             if x1=x2 orelse y1=y2 then
  65.                 genBox s5
  66.             else
  67.                 (((Int.min(x1,x2),Int.max(y1,y2)),(Int.max(x1,x2),Int.min(y1,y2))),s5)
  68.         end
  69.  
  70.     fun gen 0 s = ([],s)
  71.       | gen n s =
  72.                 let
  73.                     val s1 = rng s
  74.                     val (L,s2) = gen (n-1) s1
  75.                     val (xs,s3) = shuffle(nums points)(points)(s2)
  76.                     val (ys,s4) = shuffle(nums points)(points)(s3)
  77.                     val xl = Seq.toList(xs)
  78.                     val yl = Seq.toList(ys)
  79.                     val (points,s5) = genPoints xl yl points s4
  80.                     val (box,s6) = genBox s5
  81.                 in
  82.                     ((points,box)::L,s6)
  83.                 end
  84.  
  85.   (* Each value is ((x, y), w), with x, y coordinates in a 2D space and w the
  86.    * weight given to this point *)
  87.   val points1 = [((0,0),2),((1,2),5),((3,3),7),((4,4),3),((5,1),9)]
  88.  
  89.   (* Each test is (points, box), where correctness is verified by calling
  90.    * (rangeSum (Seq.fromList points) box) and comparing it with the result of
  91.    * our reference solution. *)
  92.     val (L,_) = (gen tests seed)
  93.  
  94.   val tests : ((point * int) list * box) list = [
  95.     (points1, ((1,3),(5,1)))
  96.     ] @ L
  97.  
  98. end
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top