[Newbies] Generating a predictable 'atRandom' result for testing

Benjamin Schroeder benschroeder at acm.org
Mon Aug 13 00:35:16 UTC 2007

On Aug 12, 2007, at 8:08 PM, Kyle Hamilton wrote:

> If you can test it for lack-of-randomness, I would presume that  
> you're not trying to test the randomness.
> I would create a wrapper to 'get number' -- if the test harness is  
> loaded and a flag is set, have that wrapper return an entry from an  
> array or such, and if not, use atRandom.

Building upon this, it looks like there's a variant of atRandom,  
atRandom:, which takes a random-number generator as a parameter.  
These are instances of Random ...

	generator := Random new.
	100 atRandom: generator. "print me"

You can seed the generators, getting the same sequence every time.

	generatorOne := Random new seed: 1000.
	a := 100 atRandom: generatorOne.

	generatorTwo := Random new seed: 1000.
	b := 100 atRandom: generatorTwo.

	a = b "print me; should be true"

The built-in atRandom uses a generator stored in the Collection  
class, accessible via a class-side method.

	Collection randomForPicking

You could always re-seed that one, but I'm not sure this would  
actually reset the sequence; nor am I sure it would be free of ill  
effects to the rest of the system - so using a generator with  
atRandom: might be a good bet! You could seed the generator  
predictably for testing, and use a standard seed usually.

You can explore all this, if you're interested, by looking at  
implementors of atRandom, and following implementors from there.

Hope this helps,
Benjamin Schroeder

More information about the Beginners mailing list