/**
 * Unit tests for list-index
 */
module list-index-test
imports libstratego-lib
strategies

  main = 
    test-suite(!"list-index-test",
      test-set-index
    ; test-index
    ; test-insert
    ; test4a
    ; test4b
    ; test5
    )

  test-set-index =
    apply-test(!"test-set-index 1", set-index
    , !(3, "a", ["a", "b", "c", "d", "e"])
    , !         ["a", "b", "c", "a", "e"]
    ) 
  ; apply-test(!"test-set-index 2", set-index
    , !(0, "f", ["a", "b", "c", "d", "e"])
    , !         ["f", "b", "c", "d", "e"]
    )
  ; apply-test(!"test-set-index 3", set-index
    , !(1, "f", ["a", "b", "c", "d", "e"])
    , !         ["a", "f", "c", "d", "e"]
    )
  ; apply-test(!"test-set-index 4", set-index
    , !(4, "f", ["a", "b", "c", "d", "e"])
    , !         ["a", "b", "c", "d", "f"]
    )
  ; apply-and-fail(!"test-set-index 5", set-index
    , !(15, "f", ["a", "b", "c", "d", "e"])
    )

  test-insert =
    apply-test(!"test-insert", insert
    , !(3, "a", ["a", "b", "c", "d", "e"])
    , !         ["a", "b", "c", "a", "d", "e"]
    )

  test-index =
    apply-test(!"test-index 1", index
    , !(3, ["a", "b", "c", "d", "e"])
    , !"c"
    )
  ; apply-test(!"test-index 2", index
    , !(1, ["a", "b", "c", "d", "e"])
    , !"a"
    )
  ; apply-test(!"test-index 3", index
    , !(5, ["a", "b", "c", "d", "e"])
    , !"e"
    )
  ; apply-test(!"test-index 4", index
    , !(1, ["a"])
    , !"a"
    )
  ; apply-and-fail(!"test-index 5", index
    , !(2, ["a"])
    )
  ; apply-and-fail(!"test-index 6", index
    , !(1, [])
    )
  ; apply-and-fail(!"test-index 7", index
    , !(0, [])
    )
  ; apply-and-fail(!"test-index 8", index
    , !(0, ["a"])
    )

  test4a =
    apply-test(!"test4a"
	, map-with-index(Fst; inc)
	, !["a", "b", "c"]
	, ![2, 3, 4]
	)

  test4b =
    apply-test(!"test4b"
	, map-with-index(Fst; inc)
	, ![]
	, ![]
	)

  test5 =
    apply-test(!"test5"
	, add-indices
	, !["a", "b", "c", "d", "e"]
	, ![(1, "a"), (2, "b"), (3, "c"), (4, "d"), (5, "e")]
	)
