Compare commits
2 Commits
35a7b6cfec
...
b2d7c75b01
Author | SHA1 | Date | |
---|---|---|---|
b2d7c75b01 | |||
d5b072851e |
1
.gitignore
vendored
1
.gitignore
vendored
@ -1 +1,2 @@
|
|||||||
*/dist-newstyle
|
*/dist-newstyle
|
||||||
|
*/db.txt
|
||||||
|
@ -78,7 +78,12 @@ runEvalIO evalm = do
|
|||||||
case result of
|
case result of
|
||||||
Right s -> case (lookup key s) of
|
Right s -> case (lookup key s) of
|
||||||
Just val -> runEvalIO' r db $ k val
|
Just val -> runEvalIO' r db $ k val
|
||||||
Nothing -> pure $ Left "Cannot find key :)"
|
Nothing -> do
|
||||||
|
input <- prompt $ "Invalid key: "++(show key)++". Enter a replacement: "
|
||||||
|
let val = readVal input
|
||||||
|
case val of
|
||||||
|
Just v -> runEvalIO' r db $ (Free (KvGetOp v k))
|
||||||
|
Nothing -> pure $ Left $ "Invalid key: "++input
|
||||||
Left e -> pure $ Left e
|
Left e -> pure $ Left e
|
||||||
runEvalIO' r db (Free (KvPutOp key val m)) = do
|
runEvalIO' r db (Free (KvPutOp key val m)) = do
|
||||||
result <- readDB db
|
result <- readDB db
|
||||||
|
@ -139,11 +139,35 @@ ioTests =
|
|||||||
r <- evalIO' (Let "_" (KvPut (CstInt 1) (CstInt 2)) (KvGet (CstInt 1)))
|
r <- evalIO' (Let "_" (KvPut (CstInt 1) (CstInt 2)) (KvGet (CstInt 1)))
|
||||||
r @?= Right (ValInt 2),
|
r @?= Right (ValInt 2),
|
||||||
--
|
--
|
||||||
|
testCase "KvGetOp Bool" $ do
|
||||||
|
r <- evalIO' (Let "_" (KvPut (CstBool True) (CstBool False)) (KvGet (CstBool True)))
|
||||||
|
r @?= Right (ValBool False),
|
||||||
|
--
|
||||||
testCase "KvGetOp shadowing" $ do
|
testCase "KvGetOp shadowing" $ do
|
||||||
r <- evalIO' (Let "_" (KvPut (CstInt 1) (CstInt 2)) (Let "_" (KvPut (CstInt 1) (CstInt 3)) (KvGet (CstInt 1))))
|
r <- evalIO' (Let "_" (KvPut (CstInt 1) (CstInt 2)) (Let "_" (KvPut (CstInt 1) (CstInt 3)) (KvGet (CstInt 1))))
|
||||||
r @?= Right (ValInt 3),
|
r @?= Right (ValInt 3),
|
||||||
--
|
--
|
||||||
testCase "KvGetOp fail" $ do
|
testCase "KvGetOp fail" $ do
|
||||||
r <- evalIO' (KvGet (CstInt 1))
|
(_, r) <-
|
||||||
r @?= Left "Cannot find key :)"
|
captureIO [":)"] $
|
||||||
|
evalIO' (KvGet (CstInt 1))
|
||||||
|
r @?= Left "Invalid key: :)",
|
||||||
|
--
|
||||||
|
testCase "KvGetOp invalid int" $ do
|
||||||
|
(_, r) <-
|
||||||
|
captureIO ["ValInt 1"] $
|
||||||
|
evalIO' (Let "_" (KvPut (CstInt 1) (CstInt 2)) (KvGet (CstInt 3)))
|
||||||
|
r @?= Right (ValInt 2),
|
||||||
|
--
|
||||||
|
testCase "KvGetOp invalid bool" $ do
|
||||||
|
(_, r) <-
|
||||||
|
captureIO ["ValBool True"] $
|
||||||
|
evalIO' (Let "_" (KvPut (CstBool True) (CstInt 2)) (KvGet (CstInt 3)))
|
||||||
|
r @?= Right (ValInt 2),
|
||||||
|
--
|
||||||
|
testCase "KvGetOp invalid multiple" $ do
|
||||||
|
(_, r) <-
|
||||||
|
captureIO ["ValInt 1","ValInt 2","ValInt 3"] $
|
||||||
|
evalIO' (Let "_" (KvPut (CstInt 3) (CstInt 2)) (KvGet (CstInt 4)))
|
||||||
|
r @?= Right (ValInt 2)
|
||||||
]
|
]
|
||||||
|
Reference in New Issue
Block a user