import Test.HUnit
import Test.Framework
import Test.Framework.Providers.HUnit
import DiscretLog

testGrid :: Assertion
testGrid = (length $ grid 10) @?= 100

-- Octave
-- >> a=3;
-- >> b=13;
-- >> p=17;

-- >> x=0;y=0;
-- >> mod(a^x*b^y,p)
-- ans =  1
-- >> x=0;y=1;
-- >> mod(a^x*b^y,p)
-- ans =  13
-- >> x=0;y=2;
-- >> mod(a^x*b^y,p)
-- ans =  16

-- >> x=1;y=0;
-- >> mod(a^x*b^y,p)
-- ans =  3
-- >> x=1;y=1;
-- >> mod(a^x*b^y,p)
-- ans =  5
-- >> x=1;y=2;
-- >> mod(a^x*b^y,p)
-- ans =  14

-- >> x=2;y=0;
-- >> mod(a^x*b^y,p)
-- ans =  9
-- >> x=2;y=1;
-- >> mod(a^x*b^y,p)
-- ans =  15
-- >> x=2;y=2;
-- >> mod(a^x*b^y,p)

-- >> x=1;y=3;
-- >> mod(a^x*b^y,p)
-- ans =  12
-- >> x=4;y=2;
-- >> mod(a^x*b^y,p)
-- ans =  4
-- >> 

testApplyGrid :: Assertion
testApplyGrid = applygrid 3 13 17 3 @?= [(0,0,1), (0,1,3), (0,2,9), (1,0,13), (1,1,5),(1,2,15),(2,0,16),(2,1,14),(2,2,8)]


main :: IO ()
main = defaultMainWithOpts
       [testCase "grid" testGrid, testCase "applygrid" testApplyGrid]
       mempty   
