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]