From b3f72e8a75ddb5271f15f49fc5740dadbf5681ae Mon Sep 17 00:00:00 2001 From: Philipp Moritz Date: Wed, 13 Feb 2019 09:07:03 -0800 Subject: [PATCH] Add regression tests for dataclass serialization (#3984) --- test/runtest.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/test/runtest.py b/test/runtest.py index f744e487c..d34b2be68 100644 --- a/test/runtest.py +++ b/test/runtest.py @@ -187,6 +187,31 @@ CUSTOM_OBJECTS = [ NamedTupleExample(1, 1.0, "hi", np.zeros([3, 5]), [1, 2, 3]) ] +# Test dataclasses in Python 3.7. +if sys.version_info >= (3, 7): + from dataclasses import make_dataclass + + DataClass0 = make_dataclass("DataClass0", [("number", int)]) + + CUSTOM_OBJECTS.append(DataClass0(number=3)) + + class CustomClass(object): + def __init__(self, value): + self.value = value + + DataClass1 = make_dataclass("DataClass1", [("custom", CustomClass)]) + + class DataClass2(DataClass1): + @classmethod + def from_custom(cls, data): + custom = CustomClass(data) + return cls(custom) + + def __reduce__(self): + return (self.from_custom, (self.custom.value, )) + + CUSTOM_OBJECTS.append(DataClass2(custom=CustomClass(43))) + BASE_OBJECTS = PRIMITIVE_OBJECTS + COMPLEX_OBJECTS + CUSTOM_OBJECTS LIST_OBJECTS = [[obj] for obj in BASE_OBJECTS]