Skip to content
Prev Previous commit
Next Next commit
add tests
  • Loading branch information
gesslerpd committed Aug 12, 2025
commit 69bf11486584e42f32f91186185b0bb705a29744
56 changes: 56 additions & 0 deletions Lib/test/test_dataclasses/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -406,6 +406,32 @@ class C:
self.assertGreaterEqual(C(1), C(0))
self.assertGreaterEqual(C(1), C(1))

@dataclass(order=True)
class CFloat:
x: float

nan = float("nan")

self.assertNotEqual(CFloat(0.0), CFloat(nan))
self.assertNotEqual(CFloat(nan), CFloat(0.0))
self.assertNotEqual(CFloat(nan), CFloat(nan))

for idx, fn in enumerate([lambda a, b: a < b,
lambda a, b: a <= b,
lambda a, b: a == b]):
with self.subTest(idx=idx):
self.assertFalse(fn(CFloat(0.0), CFloat(nan)))
self.assertFalse(fn(CFloat(nan), CFloat(0.0)))
self.assertFalse(fn(CFloat(nan), CFloat(nan)))

for idx, fn in enumerate([lambda a, b: a > b,
lambda a, b: a >= b,
lambda a, b: a == b]):
with self.subTest(idx=idx):
self.assertFalse(fn(CFloat(0.0), CFloat(nan)))
self.assertFalse(fn(CFloat(nan), CFloat(0.0)))
self.assertFalse(fn(CFloat(nan), CFloat(nan)))

def test_simple_compare(self):
# Ensure that order=False is the default.
@dataclass
Expand Down Expand Up @@ -460,6 +486,36 @@ class C:
self.assertTrue(fn(C(1, 0), C(0, 1)))
self.assertTrue(fn(C(1, 1), C(1, 0)))

@dataclass(order=True)
class CFloat:
x: float
y: float

nan = float("nan")

self.assertNotEqual(CFloat(0.0, nan), CFloat(nan, 0.0))
self.assertNotEqual(CFloat(0.0, 0.0), CFloat(nan, nan))
self.assertNotEqual(CFloat(0.0, nan), CFloat(nan, nan))
self.assertNotEqual(CFloat(nan, nan), CFloat(nan, nan))

for idx, fn in enumerate([lambda a, b: a < b,
lambda a, b: a <= b,
lambda a, b: a == b]):
with self.subTest(idx=idx):
self.assertFalse(fn(CFloat(0.0, nan), CFloat(nan, 0.0)))
self.assertFalse(fn(CFloat(0.0, 0.0), CFloat(nan, nan)))
self.assertFalse(fn(CFloat(0.0, nan), CFloat(nan, nan)))
self.assertFalse(fn(CFloat(nan, nan), CFloat(nan, nan)))

for idx, fn in enumerate([lambda a, b: a > b,
lambda a, b: a >= b,
lambda a, b: a == b]):
with self.subTest(idx=idx):
self.assertFalse(fn(CFloat(0.0, nan), CFloat(nan, 0.0)))
self.assertFalse(fn(CFloat(0.0, 0.0), CFloat(nan, nan)))
self.assertFalse(fn(CFloat(0.0, nan), CFloat(nan, nan)))
self.assertFalse(fn(CFloat(nan, nan), CFloat(nan, nan)))

def test_compare_subclasses(self):
# Comparisons fail for subclasses, even if no fields
# are added.
Expand Down
Loading