module TestPhilox (test_philox) where import Data.Word import Test.Framework (testGroup) import Test.Framework.Providers.HUnit import Test.HUnit import System.Random.Random123.Types import System.Random.Random123.Philox -- Reference results were obtained using Random123 v1.07 -- Checking reference results for Philox-2x32-10 test_philox2x32 = results @?= reference where key = 123 :: Word32 rounds = 10 counters = [ (0x6f55b92a, 0xab1c5ea9), (0x2e24118f, 0xf96cd57b), (0x35c2faac, 0x229e22ea), (0x71d82da5, 0xe7758e07), (0xefdadeee, 0x58849b8f)] reference = [ (0xc8a74eda, 0x43748166), (0x0f2f49b3, 0x5440de8c), (0x9b0b15f0, 0x62ad33f0), (0x8e0d363a, 0xec949c27), (0xef1c72c0, 0xabcdf6f6)] results = map (philox2R rounds key) counters -- Checking reference results for Philox-4x32-10 test_philox2x64 = results @?= reference where key = (123, 456) :: Array2 Word32 rounds = 10 counters = [ (0x5bf34ff4, 0x98f9badb, 0x4f816cab, 0xe62bd835), (0xdfe40202, 0xdf14b7de, 0x9f66a741, 0xcf4157f7), (0x839ac18e, 0xa043ba06, 0x94fd2987, 0x7d176d4c), (0xdbba4414, 0x4a0462e2, 0x74cf99d4, 0x68d78dad), (0x694f3a06, 0xc113b26e, 0x6b7be5fe, 0x47e59594)] reference = [ (0x01c5a89a, 0xc8783325, 0x6fcbdf46, 0x0e5e2c08), (0xbdfdcee8, 0x2302ddcb, 0x0c6b097d, 0xfe5b1b6d), (0x41852fa7, 0xca2e06e0, 0x421b06e6, 0x825db2b2), (0x858a0b3f, 0x9c4ee5ae, 0x409bca71, 0x6174268f), (0x1fb47ee3, 0x465c46e9, 0xac8a8a63, 0x770b5eb8)] results = map (philox4R rounds key) counters -- Checking reference results for Philox-2x64-10 test_philox4x32 = results @?= reference where key = 123 :: Word64 rounds = 10 counters = [ (0xf5bd87c1f90bf000, 0xfdcf5569188d8000), (0x1fcbd563f0fc8e00, 0x9eb6d45bd5096000), (0x5baaae0aecd1e000, 0x53d0329123492c00), (0x62ef71add3320800, 0x625c1fc53fd21000), (0x83d3483f4f369000, 0x395f94432bdf0200)] reference = [ (0x70aa5fafe6b960f0, 0xf0296d49836ec74d), (0x5e6a58a58da65da7, 0xd58ae0056c4f6eb0), (0x79feffb4c50d7a7e, 0x586c57e69f636783), (0x9f0ef9aa1c02cbb3, 0x64d05e4f231859ea), (0x529c1fe09c72783b, 0x6a3b27e993d5fd7b)] results = map (philox2R rounds key) counters -- Checking reference results for Philox-4x64-10 test_philox4x64 = results @?= reference where key = (123, 456) :: Array2 Word64 rounds = 10 counters = [ (0x1d1fc5123d698500, 0x6a0fd3ccbc9d3800, 0xe93a590b53026000, 0x3b339cb99a06fa00), (0x22f53249be020e00, 0xcfbd27dc0b0dc000, 0xbe8468a6b6ac3000, 0x0428398af2cfcac0), (0xd07b0391ea202000, 0xc6bb23b0fb74c800, 0x62720dec16217800, 0xdd5d41a2c6c29800), (0x4f9ffd1a930a3800, 0x41ee8eae5f157c00, 0x1e7ac9fcae5af500, 0x9e618d09ef001000), (0x9712f6164d422800, 0xc04f3f2e6d87a800, 0x7e2369ed83cdac00, 0xdb986d520bfcc000)] reference = [ (0xcf1ee3ae885c3928, 0x90a39b52bb92f018, 0x1e2c1e36cdafc6d5, 0x2068f5a63acafdbb), (0x28b86429c0cc8d2f, 0xedb2c9aeaa6ef776, 0x7615c3e5815ea96c, 0xdcf5e8849a76aec0), (0x775904470661a226, 0xeceefd4563c20c51, 0x5d842c642c640a6b, 0xd17f2f87ad2fa74e), (0x00c263e4bc04441f, 0xaecb35c835e03874, 0x46bb918e4a85adb7, 0x6c5fd577457f6315), (0x61ca2527c8acdb96, 0x87c6dd6227eb5256, 0x6901e9c532adea59, 0x9bd765a53cca4d5f)] results = map (philox4R rounds key) counters test_philox = testGroup "Philox, comparison with the reference" [ testCase "2x32" test_philox2x32, testCase "4x32" test_philox4x32, testCase "2x64" test_philox2x64, testCase "4x64" test_philox4x64 ]