diff options
author | Sylvain Henry <sylvain@haskus.fr> | 2020-09-30 19:26:02 +0200 |
---|---|---|
committer | Sylvain Henry <sylvain@haskus.fr> | 2020-10-05 10:32:31 +0200 |
commit | 89a001505a67f59ef504dbc85db4ee335661f21f (patch) | |
tree | de11b9043eb22988ba8cbe552567936e72be63c0 | |
parent | d5e13cebc969f9820b6b9437afe0699e15bbc2ff (diff) | |
download | haskell-89a001505a67f59ef504dbc85db4ee335661f21f.tar.gz |
Bignum: add integerNegate RULE
-rw-r--r-- | libraries/ghc-bignum/src/GHC/Num/Integer.hs | 3 | ||||
-rw-r--r-- | testsuite/tests/lib/integer/all.T | 1 | ||||
-rw-r--r-- | testsuite/tests/lib/integer/integerNegate.hs | 8 | ||||
-rw-r--r-- | testsuite/tests/lib/integer/integerNegate.stderr | 10 |
4 files changed, 22 insertions, 0 deletions
diff --git a/libraries/ghc-bignum/src/GHC/Num/Integer.hs b/libraries/ghc-bignum/src/GHC/Num/Integer.hs index 3bf75ab624..9709468ee2 100644 --- a/libraries/ghc-bignum/src/GHC/Num/Integer.hs +++ b/libraries/ghc-bignum/src/GHC/Num/Integer.hs @@ -486,6 +486,9 @@ integerNegate (IP b) | isTrue# (bigNatEqWord# b ABS_INT_MINBOUND##) = IS INT_MINBOUND# | True = IN b +{-# RULES +"integerNegate/integerNegate" forall x. integerNegate (integerNegate x) = x +#-} -- | Compute absolute value of an 'Integer' integerAbs :: Integer -> Integer diff --git a/testsuite/tests/lib/integer/all.T b/testsuite/tests/lib/integer/all.T index 45270453a1..0c997f7ebf 100644 --- a/testsuite/tests/lib/integer/all.T +++ b/testsuite/tests/lib/integer/all.T @@ -1,3 +1,4 @@ +test('integerNegate', normal, compile, ['-ddump-simpl -dno-typeable-binds -dsuppress-all -dsuppress-uniques']) test('integerBits', normal, compile_and_run, ['']) test('integerConversions', normal, compile_and_run, ['']) test('plusMinusInteger', [omit_ways(['ghci'])], compile_and_run, ['']) diff --git a/testsuite/tests/lib/integer/integerNegate.hs b/testsuite/tests/lib/integer/integerNegate.hs new file mode 100644 index 0000000000..777c1b002a --- /dev/null +++ b/testsuite/tests/lib/integer/integerNegate.hs @@ -0,0 +1,8 @@ +{-# OPTIONS_GHC -O2 #-} + +module Test where + +import GHC.Num.Integer + +neg_neg :: Integer -> Integer +neg_neg x = integerNegate (integerNegate x) diff --git a/testsuite/tests/lib/integer/integerNegate.stderr b/testsuite/tests/lib/integer/integerNegate.stderr new file mode 100644 index 0000000000..bebc75c44f --- /dev/null +++ b/testsuite/tests/lib/integer/integerNegate.stderr @@ -0,0 +1,10 @@ + +==================== Tidy Core ==================== +Result size of Tidy Core + = {terms: 3, types: 3, coercions: 0, joins: 0/0} + +-- RHS size: {terms: 2, types: 1, coercions: 0, joins: 0/0} +neg_neg = \ x -> x + + + |