From b2d7c75b01825dbcf64a897e24c0e2b5b34bb929 Mon Sep 17 00:00:00 2001 From: Nikolaj Gade Date: Fri, 4 Oct 2024 17:23:29 +0200 Subject: [PATCH] :books: 3.2 done bitchessssssssssss --- a4/db.txt | 0 a4/src/APL/InterpIO.hs | 7 ++++++- a4/src/APL/Interp_Tests.hs | 28 ++++++++++++++++++++++++++-- 3 files changed, 32 insertions(+), 3 deletions(-) delete mode 100644 a4/db.txt diff --git a/a4/db.txt b/a4/db.txt deleted file mode 100644 index e69de29..0000000 diff --git a/a4/src/APL/InterpIO.hs b/a4/src/APL/InterpIO.hs index 5706c91..89c8d06 100644 --- a/a4/src/APL/InterpIO.hs +++ b/a4/src/APL/InterpIO.hs @@ -78,7 +78,12 @@ runEvalIO evalm = do case result of Right s -> case (lookup key s) of 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 runEvalIO' r db (Free (KvPutOp key val m)) = do result <- readDB db diff --git a/a4/src/APL/Interp_Tests.hs b/a4/src/APL/Interp_Tests.hs index e190e88..d7ba523 100644 --- a/a4/src/APL/Interp_Tests.hs +++ b/a4/src/APL/Interp_Tests.hs @@ -139,11 +139,35 @@ ioTests = r <- evalIO' (Let "_" (KvPut (CstInt 1) (CstInt 2)) (KvGet (CstInt 1))) 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 r <- evalIO' (Let "_" (KvPut (CstInt 1) (CstInt 2)) (Let "_" (KvPut (CstInt 1) (CstInt 3)) (KvGet (CstInt 1)))) r @?= Right (ValInt 3), -- testCase "KvGetOp fail" $ do - r <- evalIO' (KvGet (CstInt 1)) - r @?= Left "Cannot find key :)" + (_, r) <- + 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) ]