@@ -160,10 +160,10 @@ def test_bounds_checking_array(self):
160
160
for dt in self .itype :
161
161
lbnd = 0 if dt is bool else np .iinfo (dt ).min
162
162
ubnd = 2 if dt is bool else np .iinfo (dt ).max + 1
163
- assert_raises (ValueError , self .rfunc , [lbnd - 1 ], [ubnd ], dtype = dt )
164
- assert_raises (ValueError , self .rfunc , [lbnd ], [ubnd + 1 ], dtype = dt )
165
- assert_raises (ValueError , self .rfunc , ubnd , [lbnd ], dtype = dt )
166
- assert_raises (ValueError , self .rfunc , [1 ], 0 , dtype = dt )
163
+ assert_raises (ValueError , self .rfunc , [lbnd - 1 ] * 2 , [ubnd ] * 2 , dtype = dt )
164
+ assert_raises (ValueError , self .rfunc , [lbnd ] * 2 , [ubnd + 1 ] * 2 , dtype = dt )
165
+ assert_raises (ValueError , self .rfunc , ubnd , [lbnd ] * 2 , dtype = dt )
166
+ assert_raises (ValueError , self .rfunc , [1 ] * 2 , 0 , dtype = dt )
167
167
168
168
def test_rng_zero_and_extremes (self ):
169
169
for dt in self .itype :
@@ -180,19 +180,25 @@ def test_rng_zero_and_extremes(self):
180
180
assert_equal (self .rfunc (tgt , tgt + 1 , size = 1000 , dtype = dt ), tgt )
181
181
182
182
def test_rng_zero_and_extremes_array (self ):
183
+ size = 1000
183
184
for dt in self .itype :
184
185
lbnd = 0 if dt is bool else np .iinfo (dt ).min
185
186
ubnd = 2 if dt is bool else np .iinfo (dt ).max + 1
186
187
187
188
tgt = ubnd - 1
188
- print (dt )
189
- assert_equal (self .rfunc ([tgt ], [tgt + 1 ], size = 1000 , dtype = dt ), tgt )
189
+ assert_equal (self .rfunc ([tgt ], [tgt + 1 ], size = size , dtype = dt ), tgt )
190
+ assert_equal (self .rfunc ([tgt ] * size , [tgt + 1 ] * size , dtype = dt ), tgt )
191
+ assert_equal (self .rfunc ([tgt ] * size , [tgt + 1 ] * size , size = size , dtype = dt ), tgt )
190
192
191
193
tgt = lbnd
192
- assert_equal (self .rfunc ([tgt ], [tgt + 1 ], size = 1000 , dtype = dt ), tgt )
194
+ assert_equal (self .rfunc ([tgt ], [tgt + 1 ], size = size , dtype = dt ), tgt )
195
+ assert_equal (self .rfunc ([tgt ] * size , [tgt + 1 ] * size , dtype = dt ), tgt )
196
+ assert_equal (self .rfunc ([tgt ] * size , [tgt + 1 ] * size , size = size , dtype = dt ), tgt )
193
197
194
198
tgt = (lbnd + ubnd ) // 2
195
- assert_equal (self .rfunc ([tgt ], [tgt + 1 ], size = 1000 , dtype = dt ), tgt )
199
+ assert_equal (self .rfunc ([tgt ], [tgt + 1 ], size = size , dtype = dt ), tgt )
200
+ assert_equal (self .rfunc ([tgt ] * size , [tgt + 1 ] * size , dtype = dt ), tgt )
201
+ assert_equal (self .rfunc ([tgt ] * size , [tgt + 1 ] * size , size = size , dtype = dt ), tgt )
196
202
197
203
def test_full_range (self ):
198
204
# Test for ticket #1690
@@ -222,6 +228,24 @@ def test_full_range_array(self):
222
228
"but one was with the following "
223
229
"message:\n \n %s" % str (e ))
224
230
231
+ def test_scalar_array_equiv (self ):
232
+ for dt in self .itype :
233
+ lbnd = 0 if dt is bool else np .iinfo (dt ).min
234
+ ubnd = 2 if dt is bool else np .iinfo (dt ).max + 1
235
+
236
+ size = 1000
237
+ mt19937 .seed (1234 )
238
+ scalar = self .rfunc (lbnd , ubnd , size = size , dtype = dt )
239
+
240
+ mt19937 .seed (1234 )
241
+ scalar_array = self .rfunc (lbnd , ubnd , size = size , dtype = dt )
242
+
243
+ mt19937 .seed (1234 )
244
+ array = self .rfunc ([lbnd ] * size , [ubnd ] * size , size = size , dtype = dt )
245
+ assert_array_equal (scalar , scalar_array )
246
+ assert_array_equal (scalar , array )
247
+
248
+
225
249
def test_in_bounds_fuzz (self ):
226
250
# Don't use fixed seed
227
251
mt19937 .seed ()
@@ -270,6 +294,27 @@ def test_repeatability(self):
270
294
res = hashlib .md5 (val ).hexdigest ()
271
295
assert_ (tgt [np .dtype (bool ).name ] == res )
272
296
297
+ def test_repeatability_broadcasting (self ):
298
+
299
+ for dt in self .itype :
300
+
301
+ lbnd = 0 if dt in (np .bool , bool , np .bool_ ) else np .iinfo (dt ).min
302
+ ubnd = 2 if dt in (np .bool , bool , np .bool_ ) else np .iinfo (dt ).max + 1
303
+
304
+ # view as little endian for hash
305
+ mt19937 .seed (1234 )
306
+ val = self .rfunc (lbnd , ubnd , size = 1000 , dtype = dt )
307
+
308
+ mt19937 .seed (1234 )
309
+ val_bc = self .rfunc ([lbnd ] * 1000 , ubnd , dtype = dt )
310
+
311
+ assert_array_equal (val , val_bc )
312
+
313
+ mt19937 .seed (1234 )
314
+ val_bc = self .rfunc ([lbnd ] * 1000 , [ubnd ] * 1000 , dtype = dt )
315
+
316
+ assert_array_equal (val , val_bc )
317
+
273
318
def test_int64_uint64_corner_case (self ):
274
319
# When stored in Numpy arrays, `lbnd` is casted
275
320
# as np.int64, and `ubnd` is casted as np.uint64.
@@ -322,6 +367,8 @@ def test_respect_dtype_array(self):
322
367
323
368
sample = self .rfunc ([lbnd ], [ubnd ], dtype = dt )
324
369
self .assertEqual (sample .dtype , dt )
370
+ sample = self .rfunc ([lbnd ] * 2 , [ubnd ] * 2 , dtype = dt )
371
+ self .assertEqual (sample .dtype , dt )
325
372
326
373
327
374
class TestRandomDist (TestCase ):
0 commit comments