-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathRecord.purs
More file actions
84 lines (79 loc) · 2.04 KB
/
Record.purs
File metadata and controls
84 lines (79 loc) · 2.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
module Test.Record (testRecord) where
import Prelude
import Effect (Effect)
import Data.Record (delete, equal, get, insert, merge, modify, rename, set)
import Data.Record.Builder as Builder
import Control.Monad.ST (run) as ST
import Data.Record.ST (poke, thaw, freeze, modify) as ST
import Data.Record.Unsafe (unsafeHas)
import Data.Symbol (SProxy(..))
import Test.Assert (assert')
testRecord :: Effect Unit
testRecord = do
let
x = SProxy :: SProxy "x"
y = SProxy :: SProxy "y"
z = SProxy :: SProxy "z"
assert' "insert, get"
$ get x (insert x 42 {})
== 42
assert' "insert, modify, get"
$ get x (modify x (_ + 1) (insert x 42 {}))
== 43
assert' "set, get"
$ get x (set x 0 { x: 42 })
== 0
assert' "set, modify, get"
$ get x (modify x (_ + 1) (set x 0 { x: 42 }))
== 1
assert' "delete, get"
$ get x (delete y { x: 42, y: 1337 })
== 42
assert' "rename"
$ get y (rename x y { x: 42 })
== 42
assert' "equal"
$ equal { a: 1, b: "b", c: true } { a: 1, b: "b", c: true }
assert' "equal2"
$ not
$ equal { a: 1, b: "b", c: true } { a: 1, b: "b", c: false }
assert' "merge"
$ equal { x: 1, y: "y" } (merge { y: "y" } { x: 1, y: 2 })
assert' "unsafeHas1"
$ unsafeHas "a" { a: 42 }
assert' "unsafeHas2"
$ not
$ unsafeHas "b" { a: 42 }
let
stTest1 =
ST.run do
rec <- ST.thaw { x: 41, y: "" }
ST.poke x 42 rec
ST.poke y "testing" rec
ST.freeze rec
stTest2 =
ST.run do
rec <- ST.thaw { x: 41 }
ST.modify x (_ + 1) rec
ST.freeze rec
assert' "pokeSTRecord"
$ stTest1.x
== 42
&& stTest1.y
== "testing"
assert' "ST.modify" $ stTest2.x == 42
let
testBuilder =
Builder.build
( Builder.insert x 42
>>> Builder.merge { y: true, z: "testing" }
>>> Builder.delete y
>>> Builder.modify x show
>>> Builder.rename z y
)
{}
assert' "Record.Builder"
$ testBuilder.x
== "42"
&& testBuilder.y
== "testing"