From e5523324d2c55e0091857e21bf5613b5f6b442a7 Mon Sep 17 00:00:00 2001 From: Sylvain Henry <sylvain@haskus.fr> Date: Wed, 30 Sep 2020 19:26:02 +0200 Subject: [PATCH] Bignum: add integerNegate RULE --- libraries/ghc-bignum/src/GHC/Num/Integer.hs | 3 +++ testsuite/tests/lib/integer/all.T | 1 + testsuite/tests/lib/integer/integerNegate.hs | 8 ++++++++ testsuite/tests/lib/integer/integerNegate.stderr | 10 ++++++++++ 4 files changed, 22 insertions(+) create mode 100644 testsuite/tests/lib/integer/integerNegate.hs create mode 100644 testsuite/tests/lib/integer/integerNegate.stderr diff --git a/libraries/ghc-bignum/src/GHC/Num/Integer.hs b/libraries/ghc-bignum/src/GHC/Num/Integer.hs index 43e4a18cdd8a..daa7ab8388dd 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 45270453a17c..0c997f7ebfb5 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 000000000000..777c1b002a86 --- /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 000000000000..bebc75c44f1d --- /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 + + + -- GitLab