async def test_comparison(self): value = 1137 for op in comparison_operators: expected = op(value, value) expression = op(Tracked(value), value) assert expected == bool(expression) assert expected != bool(~expression) expression = op(value, Tracked(value)) assert expected == bool(expression) assert expected != bool(~expression) expression = op(Tracked(value), Tracked(value)) assert expected == bool(expression) assert expected != bool(~expression)
async def test_mutable(self): """Tracked does not mutate the initial value if operations are pure""" tracked = Tracked([1, 2, 3]) tracked_value = tracked.value await (tracked == [1, 2, 3]) await (tracked + [4, 5]) assert tracked_value == [1, 2, 3] assert tracked == [1, 2, 3, 4, 5]
async def test_operator_pow(self): tracked = Tracked(1137) expected = pow(tracked.value, 42) result = await pow(tracked, 42) assert result is None assert expected == tracked.value expected = pow(tracked.value, 42, 3) result = await pow(tracked, 42, 3) assert result is None assert expected == tracked.value
async def test_comparison_wait(self): value = 1137 tracked = Tracked(value) await (tracked == value) assert time.now == 0 async with Scope() as scope: scope.do(tracked + 10, after=10) scope.do(tracked + 10, after=20) await (tracked == value + 20) assert time.now == 20
async def test_operators(self): for op in modifying_operators: tracked = Tracked(1137) try: expected = op(tracked.value, 10) except TypeError: with pytest.raises(TypeError): await op(tracked, 10) else: result = await op(tracked, 10) assert result is None assert expected == tracked.value
async def test_inplace(self): """Inplace operations are not well-defined""" for op in inplace_operators: tracked = Tracked(1137) with pytest.raises(TypeError): op(tracked, 10)
async def test_reflected(self): """Reflected operations are not well-defined""" for op in modifying_operators: tracked = Tracked(1137) with pytest.raises(TypeError): await op(10, tracked)
async def test_misuse(self): tracked = Tracked(1137) with pytest.raises(TypeError): await tracked with pytest.raises(TypeError): bool(tracked)
async def test_representable(self): for case in (Tracked(1138), Tracked(1138) > Tracked(1), Tracked(1138) + 1): str(case), repr(case)
async def test_tracked_op_tracked(self): with pytest.raises(AssertionError): Tracked(2) + Tracked(2)