@@ -27,7 +27,7 @@ enum Op {
27
27
/// - `rng`: a random number generator
28
28
/// - `times`: the number of operations to be generated
29
29
/// - `max_lvl`: the maximum level of the tree
30
- fn random_test_gen (rng : @random . Rand , times : Int , max_lvl : Int ) -> Array [Op ] {
30
+ fn random_test_gen (rng : Random , times : Int , max_lvl : Int ) -> Array [Op ] {
31
31
// Hyperparameters
32
32
let op_count = 3
33
33
let max_len = branching_factor_power (max_lvl )
@@ -93,7 +93,7 @@ fn execute_array_test(rs : Array[Op]) -> Unit! {
93
93
for i = 0 ; i < len ; i = i + 1 {
94
94
a .push (v [i ])
95
95
}
96
- t = t .concat (from_iter ( v . iter () ))
96
+ t = t .concat (from_array ( v ))
97
97
check_array_eq! (a , t )
98
98
}
99
99
Set (idx , v ) => {
@@ -116,22 +116,6 @@ fn branching_factor_power(a : Int) -> Int {
116
116
ret
117
117
}
118
118
119
- ///|
120
- /// Repeat the given string up to 32 characters.
121
- /// Used to generate a random seed for the test.
122
- fn repeat_up_to_32 (s : String ) -> Bytes {
123
- let a_len = 32
124
- let s_len = s .length ()
125
- let a = FixedArray ::make (a_len , b '0' )
126
- let mut j = 0
127
- for i = 0 ; i < a_len ; i = i + 1 {
128
- let l = a .set_utf8_char (i , s [j ])
129
- guard l == 1
130
- j = (j + 1 ) % s_len
131
- }
132
- Bytes ::from_fixedarray (a )
133
- }
134
-
135
119
///|
136
120
/// Use this function to check if the array and the @immut/array are equal.
137
121
/// If we `inspect` the array, it will raise an error if the arrays are too long.
@@ -159,6 +143,19 @@ fn check_fixedarray_eq(a : FixedArray[Int], t : T[Int]) -> Unit! {
159
143
///|
160
144
/// Generate a random array of length `n`.
161
145
fn random_array (n : Int ) -> Array [Int ] {
162
- let rng = @random . new ( seed = b "DEADBEEFLIVEBEEFDEADBEEFDEADBEEF" )
146
+ let rng = Random ({ val : 0 } )
163
147
Array ::makei (n , fn (i ) { rng .int (limit = i ) })
164
148
}
149
+
150
+ ///|
151
+ type Random Ref [UInt64 ]
152
+
153
+ ///|
154
+ fn int (self : Random , limit ~ : Int ) -> Int {
155
+ let limit = if limit == 0 { 1L << 32 } else { limit .to_int64 () }
156
+ let a = 1UL << 48
157
+ let c = 11UL
158
+ let m = 25214903917UL
159
+ self ._.val = (a * self ._.val + c ) % m
160
+ (self ._.val.reinterpret_as_int64 () % limit ).to_int ()
161
+ }
0 commit comments