diff --git a/haskell-math.cabal b/haskell-math.cabal index 4188dfd..c98af7b 100644 --- a/haskell-math.cabal +++ b/haskell-math.cabal @@ -59,6 +59,7 @@ test-suite haskell-math-test main-is: Main.hs other-modules: GF2test + TonelliShanksTest build-depends: base ^>=4.18.2.1, haskell-math, diff --git a/test/Main.hs b/test/Main.hs index 2b8ee0d..8b117f9 100644 --- a/test/Main.hs +++ b/test/Main.hs @@ -1,10 +1,12 @@ module Main (main) where import GF2test (run) +import TonelliShanksTest (run) main :: IO () main = do putStrLn "Running all tests" GF2test.run + TonelliShanksTest.run putStrLn "All tests done." diff --git a/test/TonelliShanksTest.hs b/test/TonelliShanksTest.hs new file mode 100644 index 0000000..7ea07be --- /dev/null +++ b/test/TonelliShanksTest.hs @@ -0,0 +1,26 @@ +module TonelliShanksTest (run) where + +import Test.HUnit + +import ModularSquareRoot (tonelliShanks) + +assertOneOf :: (Eq a, Show a) => String -> Maybe a -> [a] -> Assertion +assertOneOf msg result expected = + case result of + Nothing -> assertFailure (msg ++ ": expected one of " ++ show expected ++ ", got Nothing") + Just x -> assertBool + (msg ++ ": got " ++ show x ++ ", expected one of " ++ show expected) + (x `elem` expected) + +run :: IO () +run = do + putStrLn "Tonelli Shanks test" + + assertOneOf "sqrt(1) mod 7" (tonelliShanks 1 7) [1,6] + assertOneOf "sqrt(2) mod 7" (tonelliShanks 2 7) [3,4] + assertEqual "sqrt(3) mod 7" (tonelliShanks 3 7) Nothing + assertOneOf "sqrt(4) mod 7" (tonelliShanks 4 7) [2,5] + assertEqual "sqrt(5) mod 7" (tonelliShanks 5 7) Nothing + assertEqual "sqrt(6) mod 7" (tonelliShanks 6 7) Nothing + + putStrLn "Tonelli Shanks test Done."