Adds cxxrandom unit test and fixes interface problems (#2099)
* Adds cxxrandom unit test and fixes interface problems * Tightens braces * Adds detection code for Shuffle's seqID/engID * Adds usage examples for cxxrandom * Gives cxxrandom objects id ranges, sort of * Updates changelog * Updates changelog.txt * Increases id space for cxxrandom * Fixes bool distribution error message and improves check * Adds comment explaining the seeded RNG tests for cxxrandom * Fixes type problem for 32bit builds * Reduces loop count a few magnitudes * Fixes a mistake in test.cxxrandom_seeddevelop
							parent
							
								
									9643246b18
								
							
						
					
					
						commit
						fe29bff845
					
				| @ -0,0 +1,76 @@ | ||||
| local rng = require('plugins.cxxrandom') | ||||
| 
 | ||||
| function test.cxxrandom_distributions() | ||||
|     rng.normal_distribution:new(0,5) | ||||
|     rng.real_distribution:new(-1,1) | ||||
|     rng.int_distribution:new(-20,20) | ||||
|     rng.bool_distribution:new(0.00000000001) | ||||
|     rng.num_sequence:new(-1000,1000) | ||||
|     -- no errors, no problem | ||||
| end | ||||
| 
 | ||||
| --[[ | ||||
| The below tests pass with their given seeds, if they begin failing | ||||
| for a given platform, or all around, new seeds should be found. | ||||
| 
 | ||||
| Note: these tests which assert RNG, are mere sanity checks | ||||
| to ensure things haven't been severely broken by any changes | ||||
| ]] | ||||
| 
 | ||||
| function test.cxxrandom_seed() | ||||
|     local nd = rng.normal_distribution:new(0,500000) | ||||
|     local e1 = rng.MakeNewEngine(1) | ||||
|     local e2 = rng.MakeNewEngine(1) | ||||
|     local e3 = rng.MakeNewEngine(2) | ||||
|     local g1 = rng.crng:new(e1, true, nd) | ||||
|     local g2 = rng.crng:new(e2, true, nd) | ||||
|     local g3 = rng.crng:new(e3, true, nd) | ||||
|     local v1 = g1:next() | ||||
|     expect.eq(v1, g2:next()) | ||||
|     expect.ne(v1, g3:next()) | ||||
| end | ||||
| 
 | ||||
| function test.cxxrandom_ranges() | ||||
|     local e1 = rng.MakeNewEngine(1) | ||||
|     local g1 = rng.crng:new(e1, true, rng.normal_distribution:new(0,1)) | ||||
|     local g2 = rng.crng:new(e1, true, rng.real_distribution:new(-5,5)) | ||||
|     local g3 = rng.crng:new(e1, true, rng.int_distribution:new(-5,5)) | ||||
|     local g4 = rng.crng:new(e1, true, rng.num_sequence:new(-5,5)) | ||||
|     for i = 1, 10 do | ||||
|         local a = g1:next() | ||||
|         local b = g2:next() | ||||
|         local c = g3:next() | ||||
|         local d = g4:next() | ||||
|         expect.ge(a, -5) | ||||
|         expect.ge(b, -5) | ||||
|         expect.ge(c, -5) | ||||
|         expect.ge(d, -5) | ||||
|         expect.le(a, 5) | ||||
|         expect.le(b, 5) | ||||
|         expect.le(c, 5) | ||||
|         expect.le(d, 5) | ||||
|     end | ||||
|     local gb = rng.crng:new(e1, true, rng.bool_distribution:new(0.00000000001)) | ||||
|     for i = 1, 10 do | ||||
|         expect.false_(gb:next()) | ||||
|     end | ||||
| end | ||||
| 
 | ||||
| function test.cxxrandom_exports() | ||||
|     local id = rng.GenerateEngine(0) | ||||
|     rng.NewSeed(id, 2022) | ||||
|     expect.ge(rng.rollInt(id, 0, 1000), 0) | ||||
|     expect.ge(rng.rollDouble(id, 0, 1), 0) | ||||
|     expect.ge(rng.rollNormal(id, 5, 1), 0) | ||||
|     expect.true_(rng.rollBool(id, 0.9999999999)) | ||||
|     local sid = rng.MakeNumSequence(0,8) | ||||
|     rng.AddToSequence(sid, 9) | ||||
|     rng.ShuffleSequence(sid, id) | ||||
|     for i = 1, 10 do | ||||
|         local v = rng.NextInSequence(sid) | ||||
|         expect.ge(v, 0) | ||||
|         expect.le(v, 9) | ||||
|     end | ||||
|     rng.DestroyNumSequence(sid) | ||||
|     rng.DestroyEngine(id) | ||||
| end | ||||
		Loading…
	
		Reference in New Issue