blob: ca3fbdf49c5ecc5bfb7d63d4bb9ce990b7ed0ff6 [file] [log] [blame]
# join
assert_eq("-".join(["a", "b", "c"]), "a-b-c")
assert_eq("-".join({"a": 0, "b": None, "c": True}), "a-b-c")
assert_eq("".join([(x + "*") for x in ["a", "b", "c"]]), "a*b*c*")
li = [(y + "*" + z + "|") for y in ["a", "b", "c"] for z in ["d", "e"]]
assert_eq("".join(li), "a*d|a*e|b*d|b*e|c*d|c*e|")
# lower, upper
assert_eq("Blah Blah".lower(), "blah blah")
assert_eq("ein bier".upper(), "EIN BIER")
assert_eq("".upper(), "")
# title
assert_eq("this is a very simple test".title(), "This Is A Very Simple Test")
assert_eq("Do We Keep Capital Letters?".title(), "Do We Keep Capital Letters?")
assert_eq(
"this isn't just an ol' apostrophe test".title(),
"This Isn'T Just An Ol' Apostrophe Test",
)
assert_eq(
"Let us test crazy characters: _bla.exe//foo:bla(test$class)".title(),
"Let Us Test Crazy Characters: _Bla.Exe//Foo:Bla(Test$Class)",
)
assert_eq(
"WE HAve tO lOWERCASE soMEthING heRE, AI?".title(),
"We Have To Lowercase Something Here, Ai?",
)
assert_eq("wh4t ab0ut s0me numb3rs".title(), "Wh4T Ab0Ut S0Me Numb3Rs")
# capitalize
assert_eq("hello world".capitalize(), "Hello world")
assert_eq("HELLO WORLD".capitalize(), "Hello world")
assert_eq("".capitalize(), "")
assert_eq("12 lower UPPER 34".capitalize(), "12 lower upper 34")
# replace
assert_eq("banana".replace("a", "e"), "benene")
assert_eq("banana".replace("a", "$()"), "b$()n$()n$()")
assert_eq("banana".replace("a", "$"), "b$n$n$")
assert_eq("banana".replace("a", "\\"), "b\\n\\n\\")
assert_eq("b$()n$()n$()".replace("$()", "$($())"), "b$($())n$($())n$($())")
assert_eq("b\\n\\n\\".replace("\\", "$()"), "b$()n$()n$()")
assert_eq("banana".replace("a", "e", 2), "benena")
assert_eq("banana".replace("a", "e", 0), "banana")
assert_eq("banana".replace("", "-"), "-b-a-n-a-n-a-")
assert_eq("banana".replace("", "-", 2), "-b-anana")
assert_eq("banana".replace("", "-", 0), "banana")
assert_eq("banana".replace("", ""), "banana")
assert_eq("banana".replace("a", ""), "bnn")
assert_eq("banana".replace("a", "", 2), "bnna")
assert_eq("banana".replace("a", "o", -2), "bonono")
assert_eq("banana".replace("a", "e", -1), "benene")
assert_eq("banana".replace("a", "e", -10), "benene")
assert_eq("banana".replace("", "-", -2), "-b-a-n-a-n-a-")
assert_fails(
lambda: "banana".replace("a", "e", None),
"parameter 'count' got value of type 'NoneType', want 'int'",
)
# index, rindex
assert_eq("banana".index("na"), 2)
assert_eq("abababa".index("ab", 1), 2)
assert_eq("banana".rindex("na"), 4)
assert_eq("abababa".rindex("ab", 1), 4)
assert_fails(lambda: "banana".index("foo"), "substring not found")
assert_fails(lambda: "banana".rindex("foo"), "substring not found")
# endswith
assert_eq("Apricot".endswith("cot"), True)
assert_eq("a".endswith(""), True)
assert_eq("".endswith(""), True)
assert_eq("Apricot".endswith("co"), False)
assert_eq("Apricot".endswith("co", -1), False)
assert_eq("abcd".endswith("c", -2, -1), True)
assert_eq("abcd".endswith("c", 1, 8), False)
assert_eq("abcd".endswith("d", 1, 8), True)
assert_eq("Apricot".endswith(("cot", "toc")), True)
assert_eq("Apricot".endswith(("toc", "cot")), True)
assert_eq("a".endswith(("", "")), True)
assert_eq("a".endswith(("", "a")), True)
assert_eq("a".endswith(("a", "a")), True)
assert_eq("".endswith(("a", "")), True)
assert_eq("".endswith(("", "")), True)
assert_eq("".endswith(("a", "a")), False)
assert_eq("a".endswith(("a")), True)
assert_eq("a".endswith(("a",)), True)
assert_eq("a".endswith(("b",)), False)
assert_eq("a".endswith(()), False)
assert_eq("".endswith(()), False)
assert_fails(lambda: "a".endswith(["a"]), "got .* 'list', want 'string or tuple'")
assert_fails(lambda: "1".endswith((1,)), "at index 0 of sub, got element of type int, want string")
assert_fails(lambda: "a".endswith(("1", 1)), "at index 0 of sub, got element of type int, want string")
# startswith
assert_eq("Apricot".startswith("Apr"), True)
assert_eq("Apricot".startswith("A"), True)
assert_eq("Apricot".startswith(""), True)
assert_eq("Apricot".startswith("z"), False)
assert_eq("".startswith(""), True)
assert_eq("".startswith("a"), False)
assert_eq("Apricot".startswith(("Apr", "rpA")), True)
assert_eq("Apricot".startswith(("rpA", "Apr")), True)
assert_eq("a".startswith(("", "")), True)
assert_eq("a".startswith(("", "a")), True)
assert_eq("a".startswith(("a", "a")), True)
assert_eq("".startswith(("a", "")), True)
assert_eq("".startswith(("", "")), True)
assert_eq("".startswith(("a", "a")), False)
assert_eq("a".startswith(("a")), True)
assert_eq("a".startswith(("a",)), True)
assert_eq("a".startswith(("b",)), False)
assert_eq("a".startswith(()), False)
assert_eq("".startswith(()), False)
assert_fails(lambda: "a".startswith(["a"]), "got .* 'list', want 'string or tuple'")
assert_fails(lambda: "1".startswith((1,)), "at index 0 of sub, got element of type int, want string")
assert_fails(lambda: "a".startswith(("1", 1)), "at index 0 of sub, got element of type int, want string")
# substring
assert_eq("012345678"[0:-1], "01234567")
assert_eq("012345678"[2:4], "23")
assert_eq("012345678"[-5:-3], "45")
assert_eq("012345678"[2:2], "")
assert_eq("012345678"[2:], "2345678")
assert_eq("012345678"[:3], "012")
assert_eq("012345678"[-1:], "8")
assert_eq("012345678"[:], "012345678")
assert_eq("012345678"[-1:2], "")
assert_eq("012345678"[4:2], "")
# count
assert_eq("abc".count("a"), 1)
assert_eq("abc".count("b"), 1)
assert_eq("abc".count("c"), 1)
assert_eq("abbc".count("b"), 2)
assert_eq("aba".count("a"), 2)
assert_eq("aaa".count("aa"), 1)
assert_eq("aaaa".count("aa"), 2)
assert_eq("abc".count("a", 0), 1)
assert_eq("abc".count("a", 1), 0)
assert_eq("abc".count("c", 0, 3), 1)
assert_eq("abc".count("c", 0, 2), 0)
assert_eq("abc".count("a", -1), 0)
assert_eq("abc".count("c", -1), 1)
assert_eq("abc".count("c", 0, 5), 1)
assert_eq("abc".count("c", 0, -1), 0)
assert_eq("abc".count("a", 0, -1), 1)
# isalpha
assert_eq("".isalpha(), False)
assert_eq("abz".isalpha(), True)
assert_eq("a1".isalpha(), False)
assert_eq("a ".isalpha(), False)
assert_eq("A".isalpha(), True)
assert_eq("AbZ".isalpha(), True)
# escape sequences
assert_eq("\"", '"')
# enumerate
assert_eq(enumerate("abc".elems()), [(0, "a"), (1, "b"), (2, "c")])
assert_eq(enumerate({"a": 0, 2: 1, "ab": 3}), [(0, "a"), (1, 2), (2, "ab")])
assert_eq(enumerate({}), [])
assert_eq(enumerate([False, True, None], 42), [(42, False), (43, True), (44, None)])
assert_fails(lambda: enumerate("ab"), "type 'string' is not iterable")
# repeat
assert_eq("abc" * 3, "abcabcabc")
assert_eq(3 * "abc", "abcabcabc")
assert_eq("abc" * 0, "")
assert_eq("abc" * -1, "")
assert_fails(lambda: "abc" * (1 << 35), "got 34359738368 for repeat, want value in signed 32-bit range")
assert_fails(lambda: "abc" * (1 << 30), "excessive repeat \\(3 \\* 1073741824 characters\\)")
# removeprefix
assert_eq("Apricot".removeprefix("Apr"), "icot")
assert_eq("Apricot".removeprefix("apr"), "Apricot")
assert_eq("Apricot".removeprefix("A"), "pricot")
assert_eq("a".removeprefix(""), "a")
assert_eq("".removeprefix(""), "")
assert_eq("".removeprefix("a"), "")
assert_eq("Apricot".removeprefix("pr"), "Apricot")
assert_eq("AprApricot".removeprefix("Apr"), "Apricot")
def removeprefix_self_unmodified():
original_string = "Apricot"
assert_eq(original_string.removeprefix("Apr"), "icot")
assert_eq(original_string, "Apricot")
removeprefix_self_unmodified()
assert_fails(lambda: "1234".removeprefix(1), "got value of type 'int', want 'string")
# removesuffix
assert_eq("Apricot".removesuffix("cot"), "Apri")
assert_eq("Apricot".removesuffix("Cot"), "Apricot")
assert_eq("Apricot".removesuffix("t"), "Aprico")
assert_eq("a".removesuffix(""), "a")
assert_eq("".removesuffix(""), "")
assert_eq("".removesuffix("a"), "")
assert_eq("Apricot".removesuffix("co"), "Apricot")
assert_eq("Apricotcot".removesuffix("cot"), "Apricot")
def removesuffix_self_unmodified():
original_string = "Apricot"
assert_eq(original_string.removesuffix("cot"), "Apri")
assert_eq(original_string, "Apricot")
removesuffix_self_unmodified()
assert_fails(lambda: "1234".removesuffix(4), "got value of type 'int', want 'string")