Switch to a more dynamic, time-based test generation scheme.

This commit is contained in:
2020-03-01 16:56:17 -08:00
parent 71451617f9
commit 9c76d7e0b4
12 changed files with 212 additions and 374 deletions

View File

@@ -16,11 +16,8 @@ import Language.Rust.Data.Ident
import Language.Rust.Data.Position
import Language.Rust.Quote
import Language.Rust.Syntax
import System.Random(RandomGen)
import RustModule
numTestCases :: Int
numTestCases = 3000
import System.Random(RandomGen)
safeAddOps :: RustModule
safeAddOps = RustModule {
@@ -28,7 +25,7 @@ safeAddOps = RustModule {
outputName = "safe_add",
isUnsigned = True,
generator = declareSafeAddOperators,
testCase = Just generateSafeTests
testCase = Just generateSafeTest
}
unsafeAddOps :: RustModule
@@ -37,7 +34,7 @@ unsafeAddOps = RustModule {
outputName = "unsafe_add",
isUnsigned = True,
generator = declareUnsafeAddOperators,
testCase = Just generateUnsafeTests
testCase = Just generateUnsafeTest
}
safeSignedAddOps :: RustModule
@@ -46,7 +43,7 @@ safeSignedAddOps = RustModule {
outputName = "safe_sadd",
isUnsigned = False,
generator = declareSafeSignedAddOperators,
testCase = Just generateSafeSignedTests
testCase = Just generateSafeSignedTest
}
unsafeSignedAddOps :: RustModule
@@ -55,7 +52,7 @@ unsafeSignedAddOps = RustModule {
outputName = "unsafe_sadd",
isUnsigned = False,
generator = declareUnsafeSignedAddOperators,
testCase = Just generateUnsafeSignedTests
testCase = Just generateUnsafeSignedTest
}
declareSafeAddOperators :: Word -> [Word] -> SourceFile Span
@@ -374,48 +371,32 @@ generateSetters useLastCarry maxI resName i
where
target = mkIdent resName
generateSafeTests :: RandomGen g => Word -> g -> [Map String String]
generateSafeTests size g = go g numTestCases
generateSafeTest :: RandomGen g => Word -> g -> (Map String String, g)
generateSafeTest size g0 = (tcase, g2)
where
go _ 0 = []
go g0 i =
let (x, g1) = generateNum g0 size
(y, g2) = generateNum g1 size
tcase = Map.fromList [("x", showX x), ("y", showX y),
("z", showX (x + y))]
in tcase : go g2 (i - 1)
(x, g1) = generateNum g0 size
(y, g2) = generateNum g1 size
tcase = Map.fromList [("x", showX x), ("y", showX y), ("z", showX (x + y))]
generateUnsafeTests :: RandomGen g => Word -> g -> [Map String String]
generateUnsafeTests size g = go g numTestCases
generateUnsafeTest :: RandomGen g => Word -> g -> (Map String String, g)
generateUnsafeTest size g0 = (tcase, g2)
where
go _ 0 = []
go g0 i =
let (x, g1) = generateNum g0 size
(y, g2) = generateNum g1 size
z = (x + y) .&. ((2 ^ size) - 1)
tcase = Map.fromList [("x", showX x), ("y", showX y),
("z", showX z)]
in tcase : go g2 (i - 1)
(x, g1) = generateNum g0 size
(y, g2) = generateNum g1 size
z = (x + y) .&. ((2 ^ size) - 1)
tcase = Map.fromList [("x", showX x), ("y", showX y), ("z", showX z)]
generateSafeSignedTests :: RandomGen g => Word -> g -> [Map String String]
generateSafeSignedTests size g = go g numTestCases
generateSafeSignedTest :: RandomGen g => Word -> g -> (Map String String, g)
generateSafeSignedTest size g0 = (tcase, g2)
where
go _ 0 = []
go g0 i =
let (x, g1) = generateSignedNum g0 size
(y, g2) = generateSignedNum g1 size
tcase = Map.fromList [("x", showX x), ("y", showX y),
("z", showX (x + y))]
in tcase : go g2 (i - 1)
(x, g1) = generateSignedNum g0 size
(y, g2) = generateSignedNum g1 size
tcase = Map.fromList [("x", showX x), ("y", showX y), ("z", showX (x + y))]
generateUnsafeSignedTests :: RandomGen g => Word -> g -> [Map String String]
generateUnsafeSignedTests size g = go g numTestCases
generateUnsafeSignedTest :: RandomGen g => Word -> g -> (Map String String, g)
generateUnsafeSignedTest size g0 = (tcase, g2)
where
go _ 0 = []
go g0 i =
let (x, g1) = generateSignedNum g0 size
(y, g2) = generateSignedNum g1 size
z = (x + y) .&. ((2 ^ size) - 1)
tcase = Map.fromList [("x", showX x), ("y", showX y),
("z", showX z)]
in tcase : go g2 (i - 1)
(x, g1) = generateSignedNum g0 size
(y, g2) = generateSignedNum g1 size
z = (x + y) .&. ((2 ^ size) - 1)
tcase = Map.fromList [("x", showX x), ("y", showX y), ("z", showX z)]