git.iko.soy/rowtype-yoga/purescript-vault
on master help sign in
80 lines 2.6 kB history raw
1module Test.Main where
3import Prelude
5import Data.Maybe (Maybe(..))
6import Data.Vault as Vault
7import Effect (Effect)
8import Effect.Aff (launchAff_)
9import Effect.Class (liftEffect)
10import Test.Spec (describe, it)
11import Test.Spec.Assertions (shouldEqual)
12import Test.Spec.Reporter (consoleReporter)
13import Test.Spec.Runner (runSpec)
15main :: Effect Unit
16main =
17 launchAff_ $
18 runSpec [ consoleReporter ] do
19 it "inserts an item" do
20 let s0 = Vault.empty
21 k <- liftEffect Vault.newKey
22 let
23 v = { foo: 1 }
24 s1 = Vault.insert k v s0
25 Vault.lookup k s1 `shouldEqual` pure v
26 it "adjusts an item" do
27 let s0 = Vault.empty
28 k <- liftEffect Vault.newKey
29 let
30 v0 = { foo: 1 }
31 s1 = Vault.insert k v0 s0
32 s2 = Vault.adjust (\r -> r { foo = r.foo + 1 }) k s1
33 Vault.lookup k s2 `shouldEqual` pure { foo: 2 }
34 it "deletes an item" do
35 let s0 = Vault.empty
36 k <- liftEffect Vault.newKey
37 let
38 s1 = Vault.insert k 1 s0
39 s2 = Vault.delete k s1
40 Vault.lookup k s2 `shouldEqual` Nothing
41 it "merges two vaults" do
42 k <- liftEffect Vault.newKey
43 l <- liftEffect Vault.newKey
44 let
45 a = Vault.insert k 1 Vault.empty
46 b = Vault.empty # Vault.insert k 2 # Vault.insert l 3
47 c = Vault.union a b
48 Vault.lookup k c `shouldEqual` pure 1
49 Vault.lookup l c `shouldEqual` pure 3
50 describe "on insert" do
51 it "does not affect other items" do
52 k <- liftEffect Vault.newKey
53 let
54 s0 = Vault.empty
55 s1 = Vault.insert k "foo" s0
56 k' <- liftEffect Vault.newKey
57 let s2 = Vault.insert k' 3 s1
58 Vault.lookup k s2 `shouldEqual` pure "foo"
59 describe "on adjust" do
60 it "does not affect other items" do
61 k <- liftEffect Vault.newKey
62 let
63 s0 = Vault.empty
64 s1 = Vault.insert k "foo" s0
65 k' <- liftEffect Vault.newKey
66 let
67 s2 = Vault.insert k' "hi" s1
68 s3 = Vault.adjust (_ <> "!") k' s2
69 Vault.lookup k s3 `shouldEqual` pure "foo"
70 describe "on delete" do
71 it "does not affect other items" do
72 k <- liftEffect Vault.newKey
73 let
74 s0 = Vault.empty
75 s1 = Vault.insert k "foo" s0
76 k' <- liftEffect Vault.newKey
77 let
78 s2 = Vault.insert k' "hi" s1
79 s3 = Vault.delete k' s2
80 Vault.lookup k s3 `shouldEqual` pure "foo"