summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSandy Maguire <sandy@sandymaguire.me>2020-09-04 09:54:06 -0700
committerMarge Bot <ben+marge-bot@smart-cactus.org>2020-09-12 00:31:37 -0400
commitfb6e29e8d19deaf7581fdef14adc88a02573c83e (patch)
tree553af51409f30e52145f9605adcd7b5fcfacfe83
parentfc965c0910757410d624229419f36f0829cf73f6 (diff)
downloadhaskell-fb6e29e8d19deaf7581fdef14adc88a02573c83e.tar.gz
Add tests
-rw-r--r--libraries/base/Data/Ord.hs4
-rw-r--r--libraries/base/tests/all.T1
-rw-r--r--libraries/base/tests/clamp.hs28
-rw-r--r--libraries/base/tests/clamp.stdout12
4 files changed, 45 insertions, 0 deletions
diff --git a/libraries/base/Data/Ord.hs b/libraries/base/Data/Ord.hs
index 9815259dec..88c22798a7 100644
--- a/libraries/base/Data/Ord.hs
+++ b/libraries/base/Data/Ord.hs
@@ -52,6 +52,10 @@ comparing p x y = compare (p x) (p y)
-- @low@ and @high@. If it is, @a@ is returned unchanged. The result
-- is otherwise @low@ if @a <= low@, or @high@ if @high <= a@.
--
+-- When clamp is used at Double and Float, it has NaN propagating semantics in
+-- its second argument. That is, @clamp (l,h) NaN = NaN@, but @clamp (NaN, NaN)
+-- x = x@.
+--
-- >>> clamp (0, 10) 2
-- 2
--
diff --git a/libraries/base/tests/all.T b/libraries/base/tests/all.T
index c29b5b3a63..0a808fa42b 100644
--- a/libraries/base/tests/all.T
+++ b/libraries/base/tests/all.T
@@ -256,3 +256,4 @@ test('T16943a', normal, compile_and_run, [''])
test('T16943b', normal, compile_and_run, [''])
test('T17499', [collect_stats('bytes allocated',5)], compile_and_run, ['-O -w'])
test('T16643', normal, compile_and_run, [''])
+test('clamp', normal, compile_and_run, [''])
diff --git a/libraries/base/tests/clamp.hs b/libraries/base/tests/clamp.hs
new file mode 100644
index 0000000000..b235daa0b9
--- /dev/null
+++ b/libraries/base/tests/clamp.hs
@@ -0,0 +1,28 @@
+import Data.Ord
+
+doClampInt :: (Int, Int) -> Int -> IO ()
+doClampInt bounds a = print $ clamp bounds a
+
+doClampFloat :: (Float, Float) -> Float -> IO ()
+doClampFloat bounds a = print $ clamp bounds a
+
+nan :: Float
+nan = 0 / 0
+
+main :: IO ()
+main = do
+ doClampInt (0, 100) 50 -- 50
+ doClampInt (0, 100) 200 -- 100
+ doClampInt (0, 100) (-5) -- 0
+
+ doClampFloat (0, 100) 50 -- 50
+ doClampFloat (0, 100) 200 -- 100
+ doClampFloat (0, 100) (-5) -- 0
+ doClampFloat (0, 100) nan -- NaN
+ doClampFloat (nan, 100) 5 -- 5
+ doClampFloat (nan, 100) 105 -- 100
+ doClampFloat (5, nan) 105 -- 105
+ doClampFloat (5, nan) 3 -- 5
+
+ doClampFloat (nan, nan) 3 -- 3
+
diff --git a/libraries/base/tests/clamp.stdout b/libraries/base/tests/clamp.stdout
new file mode 100644
index 0000000000..a1ee2b8979
--- /dev/null
+++ b/libraries/base/tests/clamp.stdout
@@ -0,0 +1,12 @@
+50
+100
+0
+50.0
+100.0
+0.0
+NaN
+5.0
+100.0
+105.0
+5.0
+3.0