Add support for scaling numbers by primitive types.

This commit is contained in:
2019-01-01 20:50:09 -08:00
parent 69312c6a42
commit 4114db21be
68 changed files with 184563 additions and 0 deletions

View File

@@ -29,6 +29,7 @@ testDatabase = [
(ModMul, "modmul", "modular multiplication", modmulTest),
(ModSq, "modsq", "modular square", modsqTest),
(Mul, "mul", "unsigned multiplication", mulTest),
(Scale, "scale", "unsigned scaling", scaleTest),
(Shifts, "shiftl", "unsigned shift left", shiftlTest),
(Shifts, "shiftr", "unsigned shift right", shiftrTest),
(Square, "square", "unsigned squaring", squareTest),
@@ -37,6 +38,7 @@ testDatabase = [
(SignedBase, "signed", "signed base", signedTest),
(SignedCmp, "sigcmp", "signed compare", sigcmpTest),
(SignedMul, "sigmul", "signed multiply", sigmulTest),
(SignedScale, "sigscale", "signed scaling", sigscaleTest),
(SignedDiv, "sigdiv", "signed division", sigdivTest),
(SignedModInv,"smodinv", "signed modular inversion",smodinvTest),
(SignedShift, "sigshiftr", "signed shift right", sigshiftrTest),
@@ -329,3 +331,22 @@ smodinvTest size memoryIn =
assert ((a * c) `mod` b == 1) $
(res, c, memory2)
in attempt memoryIn
scaleTest :: Test
scaleTest size memory0 =
let (a, memory1) = generateNum memory0 "a" size
(b, memory2) = generateNum memory1 "b" 64
c = a * b
res = Map.fromList [("a", showX a), ("b", showX b),
("c", showX c)]
in (res, c, memory2)
sigscaleTest :: Test
sigscaleTest size memory0 =
let (a, memory1) = genSign (generateNum memory0 "a" size)
(b, memory2) = genSign (generateNum memory1 "b" 63)
c = a * b
res = Map.fromList [("a", showX a), ("b", showX b),
("c", showX c)]
in (res, c, memory2)