#include "gamemath/PCGRandom.h" #include "unittest/TestSuite.h" static void testSeed(void) { pcg_state state; pcg32_seed(&state, 0, 0); TestCase_assertUIntEqual(state.state, 747796406u); TestCase_assertUIntEqual(state.inc, 1); pcg32_seed(&state, 1, 2); TestCase_assertUIntEqual(state.state, 191811139u); TestCase_assertUIntEqual(state.inc, 5); } static void testStir(void) { pcg_state state; pcg32_seed(&state, 0, 0); TestCase_assertUIntEqual(state.state, 747796406u); TestCase_assertUIntEqual(state.inc, 1); pcg32_stir(&state, 0); TestCase_assertUIntEqual(state.state, 747796406u); TestCase_assertUIntEqual(state.inc, 1); pcg32_stir(&state, 1); TestCase_assertUIntEqual(state.state, 873485567u); TestCase_assertUIntEqual(state.inc, 1); pcg32_seed(&state, 0, 0); pcg32_stir(&state, 2); TestCase_assertUIntEqual(state.state, 1836347860u); TestCase_assertUIntEqual(state.inc, 1); pcg32_seed(&state, 1, 2); pcg32_stir(&state, 1); TestCase_assertUIntEqual(state.state, 3956047564u); TestCase_assertUIntEqual(state.inc, 5); } static void testOutput(void) { pcg_state state; uint32_t result; pcg32_seed(&state, 0, 0); result = pcg32_uirand(&state); TestCase_assertUIntEqual(result, 5); result = pcg32_uirand(&state); TestCase_assertUIntEqual(result, 3292437813u); result = pcg32_uirand(&state); TestCase_assertUIntEqual(result, 3402080369u); pcg32_seed(&state, 1, 2); result = pcg32_uirand(&state); TestCase_assertUIntEqual(result, 33); result = pcg32_uirand(&state); TestCase_assertUIntEqual(result, 2559674482u); result = pcg32_uirand(&state); TestCase_assertUIntEqual(result, 1885115863u); } static void testVariants(void) { pcg_state state; int32_t resultSigned; //float resultFloat; pcg32_seed(&state, 0, 0); resultSigned = pcg32_irand(&state); TestCase_assertIntEqual(resultSigned, 5); resultSigned = pcg32_irand(&state); TestCase_assertIntEqual(resultSigned, -1002529483); resultSigned = pcg32_irand(&state); TestCase_assertIntEqual(resultSigned, -892886927); pcg32_seed(&state, 1, 2); resultSigned = pcg32_irand(&state); TestCase_assertIntEqual(resultSigned, 33); resultSigned = pcg32_irand(&state); TestCase_assertIntEqual(resultSigned, -1735292814); resultSigned = pcg32_irand(&state); TestCase_assertIntEqual(resultSigned, 1885115863); /* pcg32_seed(&state, 0, 0); resultFloat = pcg32_ufrand(&state, 1.0f); TestCase_assertFloatEqual(resultFloat, 0.0f); resultFloat = pcg32_ufrand(&state, 1.0f); TestCase_assertFloatEqual(resultFloat, 1.0f); resultFloat = pcg32_ufrand(&state, 1.0f); TestCase_assertFloatEqual(resultFloat, 2.0f); pcg32_seed(&state, 0, 0); resultFloat = pcg32_ufrand(&state, 2.0f); TestCase_assertFloatEqual(resultFloat, 0.0f); resultFloat = pcg32_ufrand(&state, 2.0f); TestCase_assertFloatEqual(resultFloat, 1.0f); resultFloat = pcg32_ufrand(&state, 2.0f); TestCase_assertFloatEqual(resultFloat, 2.0f); pcg32_seed(&state, 1, 2); resultFloat = pcg32_ufrand(&state, 1.0f); TestCase_assertFloatEqual(resultFloat, 3.0f); resultFloat = pcg32_ufrand(&state, 1.0f); TestCase_assertFloatEqual(resultFloat, 4.0f); resultFloat = pcg32_ufrand(&state, 1.0f); TestCase_assertFloatEqual(resultFloat, 5.0f); pcg32_seed(&state, 0, 0); resultFloat = pcg32_frand(&state, 1.0f); TestCase_assertFloatEqual(resultFloat, 0.0f); resultFloat = pcg32_frand(&state, 1.0f); TestCase_assertFloatEqual(resultFloat, 1.0f); resultFloat = pcg32_frand(&state, 1.0f); TestCase_assertFloatEqual(resultFloat, 2.0f); pcg32_seed(&state, 0, 0); resultFloat = pcg32_frand(&state, 2.0f); TestCase_assertFloatEqual(resultFloat, 0.0f); resultFloat = pcg32_frand(&state, 2.0f); TestCase_assertFloatEqual(resultFloat, 1.0f); resultFloat = pcg32_frand(&state, 2.0f); TestCase_assertFloatEqual(resultFloat, 2.0f); pcg32_seed(&state, 1, 2); resultFloat = pcg32_frand(&state, 1.0f); TestCase_assertFloatEqual(resultFloat, 3.0f); resultFloat = pcg32_frand(&state, 1.0f); TestCase_assertFloatEqual(resultFloat, 4.0f); resultFloat = pcg32_frand(&state, 1.0f); TestCase_assertFloatEqual(resultFloat, 5.0f); */ } TEST_SUITE(PCGRandomTest, testSeed, testStir, testOutput, testVariants)