{-# LANGUAGE OverloadedLists #-} module Interpreter.Function.DeleteAtSpec (spec, main) where import Helpers main :: IO () main = hspec spec spec :: Spec spec = withStdlibFunction "delete_at" $ \deleteAtFunc -> do let evalArgs' = dummyEval . deleteAtFunc narray = PArray . fmap PNumber check a b res = case evalArgs' [narray a, PNumber b] of Left rr -> expectationFailure (show rr) Right res' -> res' `shouldBe` narray res checkError args ins = case evalArgs' args of Left rr -> show rr `shouldContain` ins Right r -> expectationFailure ("Should have errored, received this instead: " <> show r) it "should error with invalid arguments" $ do checkError [] "expects 2 arguments" checkError [PNumber 1] "expects 2 arguments" checkError ["foo", "bar"] "expects its first argument to be an array" checkError [ narray [0,1,2], PNumber 3 ] "Out of bounds access" it "should work otherwise" $ do check [0,1,2] 1 [0,2] it "should work for negative positions" $ do pending check [0,1,2] (-1) [0,1] check [0,1,2] (-4) [0,1,2]