| 11 | #include "fl/stl/static_assert.h" |
| 12 | |
| 13 | FL_TEST_FILE(FL_FILEPATH) { |
| 14 | |
| 15 | using namespace fl; |
| 16 | |
| 17 | FL_TEST_CASE("fl::fl_random - Basic construction and seeding") { |
| 18 | FL_SUBCASE("Default constructor") { |
| 19 | fl_random rng; |
| 20 | // Should create a valid generator |
| 21 | u32 val1 = rng(); |
| 22 | u32 val2 = rng(); |
| 23 | // Random values should be different (statistically) |
| 24 | FL_CHECK(val1 != val2); |
| 25 | } |
| 26 | |
| 27 | FL_SUBCASE("Constructor with explicit seed") { |
| 28 | fl_random rng1(12345); |
| 29 | fl_random rng2(12345); |
| 30 | |
| 31 | // Same seed should produce same sequence |
| 32 | FL_CHECK_EQ(rng1(), rng2()); |
| 33 | FL_CHECK_EQ(rng1(), rng2()); |
| 34 | FL_CHECK_EQ(rng1(), rng2()); |
| 35 | } |
| 36 | |
| 37 | FL_SUBCASE("Different seeds produce different sequences") { |
| 38 | fl_random rng1(111); |
| 39 | fl_random rng2(222); |
| 40 | |
| 41 | u32 val1 = rng1(); |
| 42 | u32 val2 = rng2(); |
| 43 | |
| 44 | // Different seeds should produce different values |
| 45 | FL_CHECK(val1 != val2); |
| 46 | } |
| 47 | } |
| 48 | |
| 49 | FL_TEST_CASE("fl::fl_random - Seed management") { |
| 50 | FL_SUBCASE("set_seed changes state") { |
| 51 | fl_random rng1(100); |
| 52 | fl_random rng2(200); |
| 53 | |
| 54 | u32 val1 = rng1(); |
| 55 | u32 val2_first = rng2(); |
| 56 | |
| 57 | // Reset rng2 to same seed as rng1 started with |
| 58 | rng2.set_seed(100); |
| 59 | u32 val2_reset = rng2(); |
| 60 | |
| 61 | // After setting same seed, should produce same first value |
| 62 | FL_CHECK_EQ(val1, val2_reset); |
| 63 | FL_CHECK(val2_first != val2_reset); |
| 64 | } |
| 65 | |
| 66 | FL_SUBCASE("get_seed returns current seed") { |
| 67 | u16 initial_seed = 5555; |
| 68 | fl_random rng(initial_seed); |
| 69 | |
| 70 | FL_CHECK_EQ(rng.get_seed(), initial_seed); |