From a021b846045c1abfba4fc6d5d44b35dcd232502b Mon Sep 17 00:00:00 2001 From: Christopher Milan Date: Thu, 15 Jan 2026 22:30:11 -0800 Subject: [PATCH] autogen: fix enum (#14171) --- test/unit/test_autogen.py | 20 ++++++++++++++++++++ tinygrad/runtime/support/c.py | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/test/unit/test_autogen.py b/test/unit/test_autogen.py index ace15ac554..0a0f41da87 100644 --- a/test/unit/test_autogen.py +++ b/test/unit/test_autogen.py @@ -491,4 +491,24 @@ typedef struct ip_discovery_header self.assertIn('struct_foo', namespace) self.assertIn('struct_foo_bar', namespace) + @unittest.skipIf(WIN, "doesn't compile on windows") + def test_enums(self): + namespace = self.run_gen(""" + enum Foo { A, B, C }; + enum Bar { X, Y, Z }; + """) + + assert namespace["A"] == 0 + assert namespace["B"] == 1 + assert namespace["C"] == 2 + assert namespace["X"] == 0 + assert namespace["Y"] == 1 + assert namespace["Z"] == 2 + assert namespace["enum_Foo"].get(0) == "A" + assert namespace["enum_Foo"].get(1) == "B" + assert namespace["enum_Foo"].get(2) == "C" + assert namespace["enum_Bar"].get(0) == "X" + assert namespace["enum_Bar"].get(1) == "Y" + assert namespace["enum_Bar"].get(2) == "Z" + if __name__ == "__main__": unittest.main() diff --git a/tinygrad/runtime/support/c.py b/tinygrad/runtime/support/c.py index eaeeedea77..b02143dada 100644 --- a/tinygrad/runtime/support/c.py +++ b/tinygrad/runtime/support/c.py @@ -65,7 +65,7 @@ else: class CFUNCTYPE: def __class_getitem__(cls, key): return ctypes.CFUNCTYPE(del_an(key[0]), *(del_an(a) for a in key[1])) class Enum: - _val_to_name_: dict[int,str] = {} + def __init_subclass__(cls): cls._val_to_name_ = {} @classmethod def get(cls, val, default="unknown"): return cls._val_to_name_.get(val, default)