content: {-# 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]
  