summaryrefslogtreecommitdiff
path: root/testsuite/tests/lib
diff options
context:
space:
mode:
authorHerbert Valerio Riedel <hvr@gnu.org>2014-11-29 12:18:25 +0100
committerHerbert Valerio Riedel <hvr@gnu.org>2014-11-29 18:39:07 +0100
commitd0d4674281a80e4148a82f833948c2b4c3051eab (patch)
treee4e5d62ae7a5dc4c0784f825cc9d9bbbc4d95459 /testsuite/tests/lib
parenta809eaba4bab96e94f2dc8fe6b617c5c6f8fd565 (diff)
downloadhaskell-d0d4674281a80e4148a82f833948c2b4c3051eab.tar.gz
Re-implement `powModInteger` (#9281)
This also exposes the following type-specialised modular exponentiation variants of `powModInteger` useful for implementing a `powModNatural` operation. powModBigNat :: BigNat -> BigNat -> BigNat -> BigNat powModBigNatWord :: BigNat -> BigNat -> Word# -> Word# powModWord :: Word# -> Word# -> Word# -> Word# `powModInteger` has been available since `integer-gmp-0.5.1` (added via 4d516855241b70eb687d95e3c121428de885e83e)
Diffstat (limited to 'testsuite/tests/lib')
-rw-r--r--testsuite/tests/lib/integer/integerGmpInternals.hs13
1 files changed, 1 insertions, 12 deletions
diff --git a/testsuite/tests/lib/integer/integerGmpInternals.hs b/testsuite/tests/lib/integer/integerGmpInternals.hs
index 5db0b099ae..d281b739d4 100644
--- a/testsuite/tests/lib/integer/integerGmpInternals.hs
+++ b/testsuite/tests/lib/integer/integerGmpInternals.hs
@@ -47,19 +47,8 @@ gcdExtInteger a b = (d, u) -- stolen from `arithmoi` package
powModSecInteger :: Integer -> Integer -> Integer -> Integer
powModSecInteger = powModInteger
--- FIXME: Lacks GMP2 version
powModInteger :: Integer -> Integer -> Integer -> Integer
-powModInteger b0 e0 m
- | e0 >= 0 = go b0 e0 1
- | otherwise = error "non-neg exponent required"
- where
- go !b e !r
- | odd e = go b' e' (r*b `mod` m)
- | e == 0 = r
- | otherwise = go b' e' r
- where
- b' = b*b `mod` m
- e' = e `unsafeShiftR` 1 -- slightly faster than "e `div` 2"
+powModInteger = I.powModInteger
-- FIXME: Lacks GMP2 version
powInteger :: Integer -> Word -> Integer