packages feed

hydra-0.5.0: src/main/haskell/Hydra/Sources/Tier4/Test/Lib/Lists.hs

module Hydra.Sources.Tier4.Test.Lib.Lists (listPrimitiveTests) where

import Hydra.Dsl.Tests
import Hydra.Dsl.Terms


listPrimitiveTests :: TestGroup
listPrimitiveTests = TestGroup "hydra/lib/lists primitives" Nothing groups []
  where
    groups = [
      listsApply,
      listsBind,
      listsConcat,
      listsHead,
      listsIntercalate,
      listsIntersperse,
      listsLast,
      listsLength,
      listsMap,
      listsPure]

listsApply :: TestGroup
listsApply = TestGroup "apply" Nothing [] [
    test [primitive _strings_toUpper, primitive _strings_toLower] ["One", "Two", "Three"] ["ONE", "TWO", "THREE", "one", "two", "three"]]
  where
    test funs lst result = primCase _lists_apply [list funs, stringList lst] (stringList result)

listsBind :: TestGroup
listsBind = TestGroup "bind" Nothing [] [
    test [1, 2, 3, 4] (primitive _lists_pure <.> primitive _math_neg) (negate <$> [1, 2, 3, 4])]
  where
    test lst fun result = primCase _lists_bind [intList lst, fun] (intList result)

listsConcat :: TestGroup
listsConcat = TestGroup "concat" Nothing [] [
    test [[1, 2, 3], [4, 5], [6, 7, 8]] [1, 2, 3, 4, 5, 6, 7, 8]]
  where
    test lists result = primCase _lists_concat [intListList lists] (intList result)

listsHead :: TestGroup
listsHead = TestGroup "head" Nothing [] [
    test [1, 2, 3] 1]
  where
    test lst result = primCase _lists_head [intList lst] (int32 result)

listsIntercalate :: TestGroup
listsIntercalate = TestGroup "intercalate" Nothing [] [
    test [0, 0] [[1, 2, 3], [4, 5], [6, 7, 8]] [1, 2, 3, 0, 0, 4, 5, 0, 0, 6, 7, 8]]
  where
    test ifx lists result = primCase _lists_intercalate [intList ifx, intListList lists] (intList result)

listsIntersperse :: TestGroup
listsIntersperse = TestGroup "intersperse" Nothing [] [
    test "and" ["one", "two", "three"] ["one", "and", "two", "and", "three"]]
  where
    test ifx lst result = primCase _lists_intersperse [string ifx, stringList lst] (stringList result)

listsLast :: TestGroup
listsLast = TestGroup "last" Nothing [] [
    test [1, 2, 3] 3]
  where
    test lst result = primCase _lists_last [intList lst] (int32 result)

listsLength :: TestGroup
listsLength = TestGroup "length" Nothing [] [
    test [1, 2, 3] 3]
  where
    test lst result = primCase _lists_length [intList lst] (int32 result)

listsMap :: TestGroup
listsMap = TestGroup "map" Nothing [] [
    test (primitive _strings_toUpper) ["one", "two"] ["ONE", "TWO"]]
  where
    test fun lst result = primCase _lists_map [fun, stringList lst] (stringList result)

listsPure :: TestGroup
listsPure = TestGroup "pure" Nothing [] [
    test "one"]
  where
    test arg = primCase _lists_pure [string arg] (stringList [arg])