mirror of
https://github.com/logos-storage/nim-goldilocks-hash.git
synced 2026-01-09 00:53:09 +00:00
53 lines
1.4 KiB
Haskell
53 lines
1.4 KiB
Haskell
|
|
-- | Generate test cases for Nim
|
|
|
|
module TestGen.TestPermutation where
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
import Data.Array
|
|
import Data.List
|
|
|
|
import System.IO
|
|
|
|
import Poseidon2
|
|
import Goldilocks
|
|
import Common
|
|
|
|
import TestGen.Shared
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
perms :: String -> (State -> State) -> [State] -> String
|
|
perms varname f xs = unlines (header : stuff ++ footer) where
|
|
header = "const " ++ varname ++ "* : array[" ++ show (length xs) ++ ", tuple[xs:F12, ys:F12]] = "
|
|
footer = [" ]",""]
|
|
stuff = showListWith nimShowStatePair [ (x, f x) | x<-xs ]
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
testStates :: [State]
|
|
testStates =
|
|
[ listToState [ fromInteger (a + b*i) | i<-[0..11] ]
|
|
| a <- [0,10,200,3000]
|
|
, b <- [1, 7, 23, 666]
|
|
]
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
printTests :: IO ()
|
|
printTests = hPrintTests stdout
|
|
|
|
hPrintTests :: Handle -> IO ()
|
|
hPrintTests h = hPutStrLn h $ unlines
|
|
[ perms "testcases_perm" permutation testStates
|
|
]
|
|
|
|
writeTests :: IO ()
|
|
writeTests = withFile "permTestCases.nim" WriteMode $ \h -> do
|
|
hPutStrLn h "# generated by TestGen/TestPermutation.hs\n"
|
|
hPutStrLn h "import goldilocks_hash/types\n"
|
|
hPrintTests h
|
|
|
|
--------------------------------------------------------------------------------
|