packages feed

Random123-0.1.0: test/TestPhilox.hs

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
    ]