import ./ProjectEuler/Utils/NumberTheory.cro import ./ProjectEuler/Utils/Rand.cro import ./ProjectEuler/Utils/BigInt.cro import ./Dict.cro RUNS = 500 SEED = 1621 -- Check that `Divisors` gives the correct number of divisors TestDivisors = let rnds = Map (% 1000) (Rands RUNS SEED) in All (\n -> (Len (Divisors n) == DivisorsCount n)) rnds -- Check that `BigAdd` works as expected TestBigAdd = let rnds = Chunks 2 (Rands (2 * RUNS) SEED) in All (\[a, b] -> (BigIntOf a) + (BigIntOf b) == BigIntOf (a + b)) rnds -- Check that `BigMult` works as expected TestBigMult = let rnds = Chunks 2 (Map (% 100000) (Rands (2 * RUNS) SEED)) in All (\[a, b] -> (BigIntOf a) * (BigIntOf b) == BigIntOf (a * b)) rnds -- Check that dictionnary lookup works as expected -- with integer keys TestDict = let rnds = Map (% 10000) (Rands RUNS SEED) in let arr = ArrayOf rnds in let idxWithVals = Zip [0..(RUNS - 1)] rnds in All (\(i, val) -> Lookup i arr == Some val) idxWithVals -- with string keys TestDict2 = let keys = Map RandString (Rands RUNS SEED) in let dict = Fold (\k d -> Insert (k, k) d) EmptyDict keys in All (\k -> (Some k == Lookup k dict)) keys Main = if All Id [TestDivisors, TestBigAdd, TestBigMult, TestDict, TestDict2] then "Everything is fine" else "Something went wrong"