@@ -1063,3 +1063,34 @@ class subc(str):
10631063[file userdefinedstr.py]
10641064class str:
10651065 pass
1066+
1067+ [case testStrOptionalEquality]
1068+ from __future__ import annotations
1069+
1070+ def eq_s_opt_s_opt(x: str | None, y: str | None) -> bool:
1071+ return x == y
1072+
1073+ def ne_s_opt_s_opt(x: str | None, y: str | None) -> bool:
1074+ return x != y
1075+
1076+ def test_optional_eq() -> None:
1077+ s = 'x'
1078+ assert eq_s_opt_s_opt(s, s)
1079+ assert eq_s_opt_s_opt(s + str(int()), s + str(int()))
1080+ assert eq_s_opt_s_opt(None, None)
1081+
1082+ assert not eq_s_opt_s_opt('x', 'y')
1083+ assert not eq_s_opt_s_opt('y', 'x')
1084+ assert not eq_s_opt_s_opt(None, 'x')
1085+ assert not eq_s_opt_s_opt('x', None)
1086+
1087+ def test_optional_ne() -> None:
1088+ s = 'x'
1089+ assert not ne_s_opt_s_opt(s, s)
1090+ assert not ne_s_opt_s_opt(s + str(int()), s+ str(int()))
1091+ assert not ne_s_opt_s_opt(None, None)
1092+
1093+ assert ne_s_opt_s_opt('x', 'y')
1094+ assert ne_s_opt_s_opt('y', 'x')
1095+ assert ne_s_opt_s_opt(None, 'x')
1096+ assert ne_s_opt_s_opt('x', None)
0 commit comments