test_emitclass.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435
  1. from __future__ import annotations
  2. import unittest
  3. from mypyc.codegen.emitclass import getter_name, setter_name, slot_key
  4. from mypyc.ir.class_ir import ClassIR
  5. from mypyc.namegen import NameGenerator
  6. class TestEmitClass(unittest.TestCase):
  7. def test_slot_key(self) -> None:
  8. attrs = ["__add__", "__radd__", "__rshift__", "__rrshift__", "__setitem__", "__delitem__"]
  9. s = sorted(attrs, key=lambda x: slot_key(x))
  10. # __delitem__ and reverse methods should come last.
  11. assert s == [
  12. "__add__",
  13. "__rshift__",
  14. "__setitem__",
  15. "__delitem__",
  16. "__radd__",
  17. "__rrshift__",
  18. ]
  19. def test_setter_name(self) -> None:
  20. cls = ClassIR(module_name="testing", name="SomeClass")
  21. generator = NameGenerator([["mod"]])
  22. # This should never be `setup`, as it will conflict with the class `setup`
  23. assert setter_name(cls, "up", generator) == "testing___SomeClass_set_up"
  24. def test_getter_name(self) -> None:
  25. cls = ClassIR(module_name="testing", name="SomeClass")
  26. generator = NameGenerator([["mod"]])
  27. assert getter_name(cls, "down", generator) == "testing___SomeClass_get_down"