Skip to content

Commit 8a463a0

Browse files
committed
Added nan, isNaN, infinity, isFinite
1 parent 636fbac commit 8a463a0

File tree

2 files changed

+38
-4
lines changed

2 files changed

+38
-4
lines changed

src/Data/Number.purs

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
-- | A module for working with PureScripts builtin `Number` type.
22
module Data.Number
33
( Fraction
4+
, nan
5+
, isNaN
6+
, infinity
7+
, isFinite
48
, fromString
59
, eqRelative
610
, eqApproximate
@@ -16,8 +20,23 @@ import Prelude
1620

1721
import Data.Maybe (Maybe(..))
1822
import Math (abs)
19-
import Global (readFloat, isFinite)
23+
import Global as G
2024

25+
-- | Not a number (NaN).
26+
nan Number
27+
nan = G.nan
28+
29+
-- | Test whether a `Number` is NaN.
30+
isNaN Number Boolean
31+
isNaN = G.isNaN
32+
33+
-- | Positive infinity.
34+
infinity Number
35+
infinity = G.infinity
36+
37+
-- | Test whether a number is finite.
38+
isFinite Number Boolean
39+
isFinite = G.isFinite
2140

2241
-- | Attempt to parse a `Number` from a `String` using JavaScripts
2342
-- | `parseFloat`. Returns `Nothing` if the parse fails or if the result is not
@@ -41,12 +60,11 @@ import Global (readFloat, isFinite)
4160
-- | Nothing
4261
-- | ```
4362
fromString String Maybe Number
44-
fromString = readFloat >>> check
63+
fromString = G.readFloat >>> check
4564
where
4665
check num | isFinite num = Just num
4766
| otherwise = Nothing
4867

49-
5068
-- | A type alias for (small) numbers, typically in the range *[0:1]*.
5169
type Fraction = Number
5270

test/Main.purs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ module Test.Main where
33
import Prelude
44

55
import Data.Maybe (Maybe(..), fromMaybe)
6-
import Data.Number (eqRelative, eqAbsolute, fromString, (≅), (≇))
6+
import Data.Number (nan, isNaN, infinity, isFinite, eqRelative, eqAbsolute,
7+
fromString, (≅), (≇))
78

89
import Control.Monad.Aff.AVar (AVAR)
910
import Control.Monad.Eff (Eff)
@@ -120,6 +121,21 @@ main = runTest do
120121
0.1 + 0.2000010.3
121122

122123

124+
suite "isNaN" do
125+
test "Check for NaN" do
126+
assert "NaN is not a number" $ isNaN nan
127+
assertFalse "infinity is a number" $ isNaN infinity
128+
assertFalse "1.0 is a number" $ isNaN 1.0
129+
130+
131+
suite "isFinite" do
132+
test "Check for infinity" do
133+
assert "1.0e100 is a finite number" $ isFinite 1.0e100
134+
assertFalse "detect positive infinity" $ isFinite infinity
135+
assertFalse "detect negative infinity" $ isFinite (-infinity)
136+
assertFalse "detect NaN" $ isFinite nan
137+
138+
123139
suite "fromString" do
124140
test "valid number string" do
125141
assert "integer strings are coerced" $

0 commit comments

Comments
 (0)