diff --git a/pystencils_tests/test_random.py b/pystencils_tests/test_random.py index f86644875acce6679473336705b929f5f3083e6e..1c5ee9cbe143f81a253de57cf23d7b75914a9d82 100644 --- a/pystencils_tests/test_random.py +++ b/pystencils_tests/test_random.py @@ -4,6 +4,12 @@ import pystencils as ps from pystencils.rng import PhiloxFourFloats, PhiloxTwoDoubles +# curand_Philox4x32_10(make_uint4(124, i, j, 0), make_uint2(0, 0)) +philox_reference = np.array([[[3576608082, 1252663339, 1987745383, 348040302], + [1032407765, 970978240, 2217005168, 2424826293]], + [[2958765206, 3725192638, 2623672781, 1373196132], + [ 850605163, 1694561295, 3285694973, 2799652583]]]) + def test_philox_double(): for target in ('cpu', 'gpu'): dh = ps.create_data_handling((2, 2), default_ghost_layers=0, default_target=target) @@ -24,6 +30,12 @@ def test_philox_double(): arr = dh.gather_array('f') assert np.logical_and(arr <= 1.0, arr >= 0).all() + x = philox_reference[:,:,0::2] + y = philox_reference[:,:,1::2] + z = x ^ y << (53 - 32) + double_reference = z * 2.**-53 + 2.**-54 + assert(np.allclose(arr, double_reference, rtol=0, atol=np.finfo(np.float64).eps)) + def test_philox_float(): for target in ('cpu', 'gpu'): @@ -41,3 +53,6 @@ def test_philox_float(): dh.all_to_cpu() arr = dh.gather_array('f') assert np.logical_and(arr <= 1.0, arr >= 0).all() + + float_reference = philox_reference * 2.**-32 + 2.**-33 + assert(np.allclose(arr, float_reference, rtol=0, atol=np.finfo(np.float32).eps))