@@ -862,3 +862,44 @@ def test_count_multi_start_end() -> None:
862862 assert string.count("aaa", 0, 12) == 1, string.count("aaa", 0, 12)
863863 assert string.count("bbb", 0, 12) == 2, string.count("bbb", 0, 12)
864864 assert string.count("ccc", 0, 12) == 1, string.count("ccc", 0, 12)
865+ def test_count_emoji() -> None:
866+ string = "ñbñ🚀ñ"
867+ assert string.count("😴") == 1 # 😴 appeared once
868+ assert string.count("🚀") == 2 # 🚀 launched twice
869+ assert string.count("ñ") == 2 # ñ hanging around twice
870+ def test_count_start_emoji() -> None:
871+ string = "ñbñ🚀ñ"
872+ assert string.count("😴", 2) == string.count("😴", -4) == 0, (string.count("😴", 2), string.count("😴", -4))
873+ assert string.count("🚀", 2) == string.count("🚀", -4) == 2, (string.count("🚀", 2), string.count("🚀", -4))
874+ assert string.count("ñ", 2) == string.count("ñ", -4) == 1, (string.count("ñ", 2), string.count("ñ", -4))
875+ # Out of bounds
876+ assert string.count("😴", 8) == 0
877+ assert string.count("😴", -8) == 1
878+ assert string.count("🚀", 8) == 0
879+ assert string.count("ñ", -8) == 2
880+ def test_count_start_end_emoji() -> None:
881+ string = "ñbñ🚀ñ"
882+ assert string.count("😴", 0, 4) == 1, string.count("😴", 0, 4)
883+ assert string.count("🚀", 0, 4) == 1, string.count("🚀", 0, 4)
884+ assert string.count("ñ", 0, 4) == 2, string.count("ñ", 0, 4)
885+ def test_count_multi_emoji() -> None:
886+ string = "😴😴😴🚀🚀ñññ🚀ñññ🚀"
887+ assert string.count("😴😴😴") == 1
888+ assert string.count("🚀🚀") == 1
889+ assert string.count("ñ") == 5
890+ def test_count_multi_start_emoji() -> None:
891+ string = "😴😴😴🚀ñññ🚀ñññ🚀"
892+ assert string.count("😴😴😴", 6) == string.count("😴😴😴", -12) == 0, (string.count("😴😴😴", 6), string.count("😴😴😴", -12))
893+ assert string.count("🚀ñ", 6) == string.count("🚀ñ", -12) == 1, (string.count("🚀ñ", 6), string.count("🚀ñ", -12))
894+ assert string.count("ññ", 6) == string.count("ññ", -12) == 2, (string.count("ññ", 6), string.count("ññ", -12))
895+ # Boundary pushing 🎢
896+ assert string.count("😴", 20) == 0
897+ assert string.count("😴", -20) == 1
898+ assert string.count("🚀", 20) == 0
899+ assert string.count("ñ", -20) == 5
900+ def test_count_multi_start_end_emoji() -> None:
901+ # Tuning in a specific range 📻
902+ string = "😴😴😴🚀🚀ñññ🚀ñññ🚀"
903+ assert string.count("😴", 0, 12) == 3, string.count("😴", 0, 12)
904+ assert string.count("🚀", 0, 12) == 2, string.count("🚀", 0, 12)
905+ assert string.count("ññ", 0, 12) == 1, string.count("ññ", 0, 12)
0 commit comments