let { run, Test, assert_eq, test, group ? } = import! std.test
let { (<|) } = import! std.function
let { Applicative, (*>), ? } = import! std.applicative
let string = import! std.string
let { Result, ? } = import! std.result
let { ? } = import! std.unit
let { ? } = import! std.effect
let slice_tests =
test "slice" <| \_ -> (assert_eq (string.slice "ab" 0 1) "a" *> assert_eq (string.slice "ab" 1 2) "b"
*> assert_eq (string.slice "abcd" 2 4) "cd")
let append_tests =
let { (<>) } = import! std.prelude
test "append" <| \_ -> (assert_eq ("ab" <> "cd") "abcd" *> assert_eq ("ab" <> "") "ab" *> assert_eq ("" <> "cd") "cd"
*> assert_eq ("" <> "") "")
let find_tests =
test "find" <| \_ -> (assert_eq (string.find "abcd1234" "ab") (Some 0)
*> assert_eq (string.find "abcd1234" "b") (Some 1)
*> assert_eq (string.find "abcd1234" "4") (Some 7)
*> assert_eq (string.find "abcd1234" "xyz") None
*> assert_eq (string.rfind "abcdabcd" "b") (Some 5)
*> assert_eq (string.rfind "abcdabcd" "d") (Some 7)
*> assert_eq (string.rfind "abcd1234" "xyz") None)
let starts_ends_tests =
test "starts_ends_tests" <| \_ -> (assert_eq (string.starts_with "abcd1234" "ab") True
*> assert_eq (string.starts_with "abcd1234" "b") False
*> assert_eq (string.ends_with "abcd1234" "1234") True
*> assert_eq (string.ends_with "abcd1234" "4") True
*> assert_eq (string.ends_with "abcd1234" "ab") False)
let trim_tests =
test "trim" <| \_ -> (assert_eq (string.trim "ab") "ab" *> assert_eq (string.trim " ab ") "ab"
*> assert_eq (string.trim "ab \t") "ab"
*> assert_eq (string.trim "\t ab") "ab"
*> assert_eq (string.trim_start " ab ") "ab "
*> assert_eq (string.trim_end " ab ") " ab")
let from_utf8_tests =
test "from_utf8_tests" <| \_ -> (assert_eq (string.from_utf8 []) (Ok "") *> assert_eq (string.from_utf8 [32b]) (Ok " ")
*> assert_eq (string.from_utf8 [195b, 165b, 195b, 164b, 195b, 182b]) (Ok "åäö")
*> assert_eq (string.from_utf8 [195b, 165b, 195b, 164b, 195b]) (Err ())
*> assert_eq (string.from_utf8 [195b, 165b, 195b, 195b, 182b]) (Err ()))
group "string" [append_tests, find_tests, starts_ends_tests, trim_tests, from_utf8_tests]