module Test.Utils where import Prelude import Control.Monad.Error.Class (class MonadThrow) import Data.Array as A import Data.Maybe (Maybe(..)) import Data.Tuple (Tuple(..)) import Effect.Exception (Error) import Test.Spec.Assertions (fail) -- | This function can be used to compare arrays, it reports the diff in more -- | detail which can be useful when debuggnign tests shouldEqualArray :: forall m t . MonadThrow Error m => Show t => Eq t => Array t -> Array t -> m Unit shouldEqualArray v1 v2 = when (v1 /= v2) $ fail $ show v1 <> " ≠ " <> show v2 <> diff where diffs = A.filter (\(Tuple a b) -> a /= b) $ A.zip v1 v2 diff = case A.head diffs of Nothing -> "" Just (Tuple a1 a2) -> " (first differing element: " <> (show a1 <> " ≠ " <> show a2) <> ")"