-- | Generate test cases for Nim module TestGen.TestPermutation where -------------------------------------------------------------------------------- import Data.Array import Data.List import System.IO import Permutations 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 :: Hash -> IO () printTests hash = hPrintTests stdout hash hPrintTests :: Handle -> Hash -> IO () hPrintTests h hash = hPutStrLn h $ unlines [ perms "testcases_perm" (permute hash) testStates ] writeTests :: Hash -> IO () writeTests hash = withFile "permTestCases.nim" WriteMode $ \h -> do hPutStrLn h "# generated by TestGen/TestPermutation.hs\n" hPutStrLn h "import goldilocks_hash/types\n" hPrintTests h hash --------------------------------------------------------------------------------