17db96d56Sopenharmony_ciimport unittest
27db96d56Sopenharmony_ci
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ciclass TestLoadAttrCache(unittest.TestCase):
57db96d56Sopenharmony_ci    def test_descriptor_added_after_optimization(self):
67db96d56Sopenharmony_ci        class Descriptor:
77db96d56Sopenharmony_ci            pass
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ci        class C:
107db96d56Sopenharmony_ci            def __init__(self):
117db96d56Sopenharmony_ci                self.x = 1
127db96d56Sopenharmony_ci            x = Descriptor()
137db96d56Sopenharmony_ci
147db96d56Sopenharmony_ci        def f(o):
157db96d56Sopenharmony_ci            return o.x
167db96d56Sopenharmony_ci
177db96d56Sopenharmony_ci        o = C()
187db96d56Sopenharmony_ci        for i in range(1025):
197db96d56Sopenharmony_ci            assert f(o) == 1
207db96d56Sopenharmony_ci
217db96d56Sopenharmony_ci        Descriptor.__get__ = lambda self, instance, value: 2
227db96d56Sopenharmony_ci        Descriptor.__set__ = lambda *args: None
237db96d56Sopenharmony_ci
247db96d56Sopenharmony_ci        self.assertEqual(f(o), 2)
257db96d56Sopenharmony_ci
267db96d56Sopenharmony_ci    def test_metaclass_descriptor_added_after_optimization(self):
277db96d56Sopenharmony_ci        class Descriptor:
287db96d56Sopenharmony_ci            pass
297db96d56Sopenharmony_ci
307db96d56Sopenharmony_ci        class Metaclass(type):
317db96d56Sopenharmony_ci            attribute = Descriptor()
327db96d56Sopenharmony_ci
337db96d56Sopenharmony_ci        class Class(metaclass=Metaclass):
347db96d56Sopenharmony_ci            attribute = True
357db96d56Sopenharmony_ci
367db96d56Sopenharmony_ci        def __get__(self, instance, owner):
377db96d56Sopenharmony_ci            return False
387db96d56Sopenharmony_ci
397db96d56Sopenharmony_ci        def __set__(self, instance, value):
407db96d56Sopenharmony_ci            return None
417db96d56Sopenharmony_ci
427db96d56Sopenharmony_ci        def f():
437db96d56Sopenharmony_ci            return Class.attribute
447db96d56Sopenharmony_ci
457db96d56Sopenharmony_ci        for _ in range(1025):
467db96d56Sopenharmony_ci            self.assertTrue(f())
477db96d56Sopenharmony_ci
487db96d56Sopenharmony_ci        Descriptor.__get__ = __get__
497db96d56Sopenharmony_ci        Descriptor.__set__ = __set__
507db96d56Sopenharmony_ci
517db96d56Sopenharmony_ci        for _ in range(1025):
527db96d56Sopenharmony_ci            self.assertFalse(f())
537db96d56Sopenharmony_ci
547db96d56Sopenharmony_ci    def test_metaclass_descriptor_shadows_class_attribute(self):
557db96d56Sopenharmony_ci        class Metaclass(type):
567db96d56Sopenharmony_ci            @property
577db96d56Sopenharmony_ci            def attribute(self):
587db96d56Sopenharmony_ci                return True
597db96d56Sopenharmony_ci
607db96d56Sopenharmony_ci        class Class(metaclass=Metaclass):
617db96d56Sopenharmony_ci            attribute = False
627db96d56Sopenharmony_ci
637db96d56Sopenharmony_ci        def f():
647db96d56Sopenharmony_ci            return Class.attribute
657db96d56Sopenharmony_ci
667db96d56Sopenharmony_ci        for _ in range(1025):
677db96d56Sopenharmony_ci            self.assertTrue(f())
687db96d56Sopenharmony_ci
697db96d56Sopenharmony_ci    def test_metaclass_set_descriptor_after_optimization(self):
707db96d56Sopenharmony_ci        class Metaclass(type):
717db96d56Sopenharmony_ci            pass
727db96d56Sopenharmony_ci
737db96d56Sopenharmony_ci        class Class(metaclass=Metaclass):
747db96d56Sopenharmony_ci            attribute = True
757db96d56Sopenharmony_ci
767db96d56Sopenharmony_ci        @property
777db96d56Sopenharmony_ci        def attribute(self):
787db96d56Sopenharmony_ci            return False
797db96d56Sopenharmony_ci
807db96d56Sopenharmony_ci        def f():
817db96d56Sopenharmony_ci            return Class.attribute
827db96d56Sopenharmony_ci
837db96d56Sopenharmony_ci        for _ in range(1025):
847db96d56Sopenharmony_ci            self.assertTrue(f())
857db96d56Sopenharmony_ci
867db96d56Sopenharmony_ci        Metaclass.attribute = attribute
877db96d56Sopenharmony_ci
887db96d56Sopenharmony_ci        for _ in range(1025):
897db96d56Sopenharmony_ci            self.assertFalse(f())
907db96d56Sopenharmony_ci
917db96d56Sopenharmony_ci    def test_metaclass_del_descriptor_after_optimization(self):
927db96d56Sopenharmony_ci        class Metaclass(type):
937db96d56Sopenharmony_ci            @property
947db96d56Sopenharmony_ci            def attribute(self):
957db96d56Sopenharmony_ci                return True
967db96d56Sopenharmony_ci
977db96d56Sopenharmony_ci        class Class(metaclass=Metaclass):
987db96d56Sopenharmony_ci            attribute = False
997db96d56Sopenharmony_ci
1007db96d56Sopenharmony_ci        def f():
1017db96d56Sopenharmony_ci            return Class.attribute
1027db96d56Sopenharmony_ci
1037db96d56Sopenharmony_ci        for _ in range(1025):
1047db96d56Sopenharmony_ci            self.assertTrue(f())
1057db96d56Sopenharmony_ci
1067db96d56Sopenharmony_ci        del Metaclass.attribute
1077db96d56Sopenharmony_ci
1087db96d56Sopenharmony_ci        for _ in range(1025):
1097db96d56Sopenharmony_ci            self.assertFalse(f())
1107db96d56Sopenharmony_ci
1117db96d56Sopenharmony_ci    def test_type_descriptor_shadows_attribute_method(self):
1127db96d56Sopenharmony_ci        class Class:
1137db96d56Sopenharmony_ci            mro = None
1147db96d56Sopenharmony_ci
1157db96d56Sopenharmony_ci        def f():
1167db96d56Sopenharmony_ci            return Class.mro
1177db96d56Sopenharmony_ci
1187db96d56Sopenharmony_ci        for _ in range(1025):
1197db96d56Sopenharmony_ci            self.assertIsNone(f())
1207db96d56Sopenharmony_ci
1217db96d56Sopenharmony_ci    def test_type_descriptor_shadows_attribute_member(self):
1227db96d56Sopenharmony_ci        class Class:
1237db96d56Sopenharmony_ci            __base__ = None
1247db96d56Sopenharmony_ci
1257db96d56Sopenharmony_ci        def f():
1267db96d56Sopenharmony_ci            return Class.__base__
1277db96d56Sopenharmony_ci
1287db96d56Sopenharmony_ci        for _ in range(1025):
1297db96d56Sopenharmony_ci            self.assertIs(f(), object)
1307db96d56Sopenharmony_ci
1317db96d56Sopenharmony_ci    def test_type_descriptor_shadows_attribute_getset(self):
1327db96d56Sopenharmony_ci        class Class:
1337db96d56Sopenharmony_ci            __name__ = "Spam"
1347db96d56Sopenharmony_ci
1357db96d56Sopenharmony_ci        def f():
1367db96d56Sopenharmony_ci            return Class.__name__
1377db96d56Sopenharmony_ci
1387db96d56Sopenharmony_ci        for _ in range(1025):
1397db96d56Sopenharmony_ci            self.assertEqual(f(), "Class")
1407db96d56Sopenharmony_ci
1417db96d56Sopenharmony_ci    def test_metaclass_getattribute(self):
1427db96d56Sopenharmony_ci        class Metaclass(type):
1437db96d56Sopenharmony_ci            def __getattribute__(self, name):
1447db96d56Sopenharmony_ci                return True
1457db96d56Sopenharmony_ci
1467db96d56Sopenharmony_ci        class Class(metaclass=Metaclass):
1477db96d56Sopenharmony_ci            attribute = False
1487db96d56Sopenharmony_ci
1497db96d56Sopenharmony_ci        def f():
1507db96d56Sopenharmony_ci            return Class.attribute
1517db96d56Sopenharmony_ci
1527db96d56Sopenharmony_ci        for _ in range(1025):
1537db96d56Sopenharmony_ci            self.assertTrue(f())
1547db96d56Sopenharmony_ci
1557db96d56Sopenharmony_ci    def test_metaclass_swap(self):
1567db96d56Sopenharmony_ci        class OldMetaclass(type):
1577db96d56Sopenharmony_ci            @property
1587db96d56Sopenharmony_ci            def attribute(self):
1597db96d56Sopenharmony_ci                return True
1607db96d56Sopenharmony_ci
1617db96d56Sopenharmony_ci        class NewMetaclass(type):
1627db96d56Sopenharmony_ci            @property
1637db96d56Sopenharmony_ci            def attribute(self):
1647db96d56Sopenharmony_ci                return False
1657db96d56Sopenharmony_ci
1667db96d56Sopenharmony_ci        class Class(metaclass=OldMetaclass):
1677db96d56Sopenharmony_ci            pass
1687db96d56Sopenharmony_ci
1697db96d56Sopenharmony_ci        def f():
1707db96d56Sopenharmony_ci            return Class.attribute
1717db96d56Sopenharmony_ci
1727db96d56Sopenharmony_ci        for _ in range(1025):
1737db96d56Sopenharmony_ci            self.assertTrue(f())
1747db96d56Sopenharmony_ci
1757db96d56Sopenharmony_ci        Class.__class__ = NewMetaclass
1767db96d56Sopenharmony_ci
1777db96d56Sopenharmony_ci        for _ in range(1025):
1787db96d56Sopenharmony_ci            self.assertFalse(f())
1797db96d56Sopenharmony_ci
1807db96d56Sopenharmony_ci    def test_load_shadowing_slot_should_raise_type_error(self):
1817db96d56Sopenharmony_ci        class Class:
1827db96d56Sopenharmony_ci            __slots__ = ("slot",)
1837db96d56Sopenharmony_ci
1847db96d56Sopenharmony_ci        class Sneaky:
1857db96d56Sopenharmony_ci            __slots__ = ("shadowed",)
1867db96d56Sopenharmony_ci            shadowing = Class.slot
1877db96d56Sopenharmony_ci
1887db96d56Sopenharmony_ci        def f(o):
1897db96d56Sopenharmony_ci            o.shadowing
1907db96d56Sopenharmony_ci
1917db96d56Sopenharmony_ci        o = Sneaky()
1927db96d56Sopenharmony_ci        o.shadowed = 42
1937db96d56Sopenharmony_ci
1947db96d56Sopenharmony_ci        for _ in range(1025):
1957db96d56Sopenharmony_ci            with self.assertRaises(TypeError):
1967db96d56Sopenharmony_ci                f(o)
1977db96d56Sopenharmony_ci
1987db96d56Sopenharmony_ci    def test_store_shadowing_slot_should_raise_type_error(self):
1997db96d56Sopenharmony_ci        class Class:
2007db96d56Sopenharmony_ci            __slots__ = ("slot",)
2017db96d56Sopenharmony_ci
2027db96d56Sopenharmony_ci        class Sneaky:
2037db96d56Sopenharmony_ci            __slots__ = ("shadowed",)
2047db96d56Sopenharmony_ci            shadowing = Class.slot
2057db96d56Sopenharmony_ci
2067db96d56Sopenharmony_ci        def f(o):
2077db96d56Sopenharmony_ci            o.shadowing = 42
2087db96d56Sopenharmony_ci
2097db96d56Sopenharmony_ci        o = Sneaky()
2107db96d56Sopenharmony_ci
2117db96d56Sopenharmony_ci        for _ in range(1025):
2127db96d56Sopenharmony_ci            with self.assertRaises(TypeError):
2137db96d56Sopenharmony_ci                f(o)
2147db96d56Sopenharmony_ci
2157db96d56Sopenharmony_ci    def test_load_borrowed_slot_should_not_crash(self):
2167db96d56Sopenharmony_ci        class Class:
2177db96d56Sopenharmony_ci            __slots__ = ("slot",)
2187db96d56Sopenharmony_ci
2197db96d56Sopenharmony_ci        class Sneaky:
2207db96d56Sopenharmony_ci            borrowed = Class.slot
2217db96d56Sopenharmony_ci
2227db96d56Sopenharmony_ci        def f(o):
2237db96d56Sopenharmony_ci            o.borrowed
2247db96d56Sopenharmony_ci
2257db96d56Sopenharmony_ci        o = Sneaky()
2267db96d56Sopenharmony_ci
2277db96d56Sopenharmony_ci        for _ in range(1025):
2287db96d56Sopenharmony_ci            with self.assertRaises(TypeError):
2297db96d56Sopenharmony_ci                f(o)
2307db96d56Sopenharmony_ci
2317db96d56Sopenharmony_ci    def test_store_borrowed_slot_should_not_crash(self):
2327db96d56Sopenharmony_ci        class Class:
2337db96d56Sopenharmony_ci            __slots__ = ("slot",)
2347db96d56Sopenharmony_ci
2357db96d56Sopenharmony_ci        class Sneaky:
2367db96d56Sopenharmony_ci            borrowed = Class.slot
2377db96d56Sopenharmony_ci
2387db96d56Sopenharmony_ci        def f(o):
2397db96d56Sopenharmony_ci            o.borrowed = 42
2407db96d56Sopenharmony_ci
2417db96d56Sopenharmony_ci        o = Sneaky()
2427db96d56Sopenharmony_ci
2437db96d56Sopenharmony_ci        for _ in range(1025):
2447db96d56Sopenharmony_ci            with self.assertRaises(TypeError):
2457db96d56Sopenharmony_ci                f(o)
2467db96d56Sopenharmony_ci
2477db96d56Sopenharmony_ci
2487db96d56Sopenharmony_ciclass TestLoadMethodCache(unittest.TestCase):
2497db96d56Sopenharmony_ci    def test_descriptor_added_after_optimization(self):
2507db96d56Sopenharmony_ci        class Descriptor:
2517db96d56Sopenharmony_ci            pass
2527db96d56Sopenharmony_ci
2537db96d56Sopenharmony_ci        class Class:
2547db96d56Sopenharmony_ci            attribute = Descriptor()
2557db96d56Sopenharmony_ci
2567db96d56Sopenharmony_ci        def __get__(self, instance, owner):
2577db96d56Sopenharmony_ci            return lambda: False
2587db96d56Sopenharmony_ci
2597db96d56Sopenharmony_ci        def __set__(self, instance, value):
2607db96d56Sopenharmony_ci            return None
2617db96d56Sopenharmony_ci
2627db96d56Sopenharmony_ci        def attribute():
2637db96d56Sopenharmony_ci            return True
2647db96d56Sopenharmony_ci
2657db96d56Sopenharmony_ci        instance = Class()
2667db96d56Sopenharmony_ci        instance.attribute = attribute
2677db96d56Sopenharmony_ci
2687db96d56Sopenharmony_ci        def f():
2697db96d56Sopenharmony_ci            return instance.attribute()
2707db96d56Sopenharmony_ci
2717db96d56Sopenharmony_ci        for _ in range(1025):
2727db96d56Sopenharmony_ci            self.assertTrue(f())
2737db96d56Sopenharmony_ci
2747db96d56Sopenharmony_ci        Descriptor.__get__ = __get__
2757db96d56Sopenharmony_ci        Descriptor.__set__ = __set__
2767db96d56Sopenharmony_ci
2777db96d56Sopenharmony_ci        for _ in range(1025):
2787db96d56Sopenharmony_ci            self.assertFalse(f())
2797db96d56Sopenharmony_ci
2807db96d56Sopenharmony_ci    def test_metaclass_descriptor_added_after_optimization(self):
2817db96d56Sopenharmony_ci        class Descriptor:
2827db96d56Sopenharmony_ci            pass
2837db96d56Sopenharmony_ci
2847db96d56Sopenharmony_ci        class Metaclass(type):
2857db96d56Sopenharmony_ci            attribute = Descriptor()
2867db96d56Sopenharmony_ci
2877db96d56Sopenharmony_ci        class Class(metaclass=Metaclass):
2887db96d56Sopenharmony_ci            def attribute():
2897db96d56Sopenharmony_ci                return True
2907db96d56Sopenharmony_ci
2917db96d56Sopenharmony_ci        def __get__(self, instance, owner):
2927db96d56Sopenharmony_ci            return lambda: False
2937db96d56Sopenharmony_ci
2947db96d56Sopenharmony_ci        def __set__(self, instance, value):
2957db96d56Sopenharmony_ci            return None
2967db96d56Sopenharmony_ci
2977db96d56Sopenharmony_ci        def f():
2987db96d56Sopenharmony_ci            return Class.attribute()
2997db96d56Sopenharmony_ci
3007db96d56Sopenharmony_ci        for _ in range(1025):
3017db96d56Sopenharmony_ci            self.assertTrue(f())
3027db96d56Sopenharmony_ci
3037db96d56Sopenharmony_ci        Descriptor.__get__ = __get__
3047db96d56Sopenharmony_ci        Descriptor.__set__ = __set__
3057db96d56Sopenharmony_ci
3067db96d56Sopenharmony_ci        for _ in range(1025):
3077db96d56Sopenharmony_ci            self.assertFalse(f())
3087db96d56Sopenharmony_ci
3097db96d56Sopenharmony_ci    def test_metaclass_descriptor_shadows_class_attribute(self):
3107db96d56Sopenharmony_ci        class Metaclass(type):
3117db96d56Sopenharmony_ci            @property
3127db96d56Sopenharmony_ci            def attribute(self):
3137db96d56Sopenharmony_ci                return lambda: True
3147db96d56Sopenharmony_ci
3157db96d56Sopenharmony_ci        class Class(metaclass=Metaclass):
3167db96d56Sopenharmony_ci            def attribute():
3177db96d56Sopenharmony_ci                return False
3187db96d56Sopenharmony_ci
3197db96d56Sopenharmony_ci        def f():
3207db96d56Sopenharmony_ci            return Class.attribute()
3217db96d56Sopenharmony_ci
3227db96d56Sopenharmony_ci        for _ in range(1025):
3237db96d56Sopenharmony_ci            self.assertTrue(f())
3247db96d56Sopenharmony_ci
3257db96d56Sopenharmony_ci    def test_metaclass_set_descriptor_after_optimization(self):
3267db96d56Sopenharmony_ci        class Metaclass(type):
3277db96d56Sopenharmony_ci            pass
3287db96d56Sopenharmony_ci
3297db96d56Sopenharmony_ci        class Class(metaclass=Metaclass):
3307db96d56Sopenharmony_ci            def attribute():
3317db96d56Sopenharmony_ci                return True
3327db96d56Sopenharmony_ci
3337db96d56Sopenharmony_ci        @property
3347db96d56Sopenharmony_ci        def attribute(self):
3357db96d56Sopenharmony_ci            return lambda: False
3367db96d56Sopenharmony_ci
3377db96d56Sopenharmony_ci        def f():
3387db96d56Sopenharmony_ci            return Class.attribute()
3397db96d56Sopenharmony_ci
3407db96d56Sopenharmony_ci        for _ in range(1025):
3417db96d56Sopenharmony_ci            self.assertTrue(f())
3427db96d56Sopenharmony_ci
3437db96d56Sopenharmony_ci        Metaclass.attribute = attribute
3447db96d56Sopenharmony_ci
3457db96d56Sopenharmony_ci        for _ in range(1025):
3467db96d56Sopenharmony_ci            self.assertFalse(f())
3477db96d56Sopenharmony_ci
3487db96d56Sopenharmony_ci    def test_metaclass_del_descriptor_after_optimization(self):
3497db96d56Sopenharmony_ci        class Metaclass(type):
3507db96d56Sopenharmony_ci            @property
3517db96d56Sopenharmony_ci            def attribute(self):
3527db96d56Sopenharmony_ci                return lambda: True
3537db96d56Sopenharmony_ci
3547db96d56Sopenharmony_ci        class Class(metaclass=Metaclass):
3557db96d56Sopenharmony_ci            def attribute():
3567db96d56Sopenharmony_ci                return False
3577db96d56Sopenharmony_ci
3587db96d56Sopenharmony_ci        def f():
3597db96d56Sopenharmony_ci            return Class.attribute()
3607db96d56Sopenharmony_ci
3617db96d56Sopenharmony_ci        for _ in range(1025):
3627db96d56Sopenharmony_ci            self.assertTrue(f())
3637db96d56Sopenharmony_ci
3647db96d56Sopenharmony_ci        del Metaclass.attribute
3657db96d56Sopenharmony_ci
3667db96d56Sopenharmony_ci        for _ in range(1025):
3677db96d56Sopenharmony_ci            self.assertFalse(f())
3687db96d56Sopenharmony_ci
3697db96d56Sopenharmony_ci    def test_type_descriptor_shadows_attribute_method(self):
3707db96d56Sopenharmony_ci        class Class:
3717db96d56Sopenharmony_ci            def mro():
3727db96d56Sopenharmony_ci                return ["Spam", "eggs"]
3737db96d56Sopenharmony_ci
3747db96d56Sopenharmony_ci        def f():
3757db96d56Sopenharmony_ci            return Class.mro()
3767db96d56Sopenharmony_ci
3777db96d56Sopenharmony_ci        for _ in range(1025):
3787db96d56Sopenharmony_ci            self.assertEqual(f(), ["Spam", "eggs"])
3797db96d56Sopenharmony_ci
3807db96d56Sopenharmony_ci    def test_type_descriptor_shadows_attribute_member(self):
3817db96d56Sopenharmony_ci        class Class:
3827db96d56Sopenharmony_ci            def __base__():
3837db96d56Sopenharmony_ci                return "Spam"
3847db96d56Sopenharmony_ci
3857db96d56Sopenharmony_ci        def f():
3867db96d56Sopenharmony_ci            return Class.__base__()
3877db96d56Sopenharmony_ci
3887db96d56Sopenharmony_ci        for _ in range(1025):
3897db96d56Sopenharmony_ci            self.assertNotEqual(f(), "Spam")
3907db96d56Sopenharmony_ci
3917db96d56Sopenharmony_ci    def test_metaclass_getattribute(self):
3927db96d56Sopenharmony_ci        class Metaclass(type):
3937db96d56Sopenharmony_ci            def __getattribute__(self, name):
3947db96d56Sopenharmony_ci                return lambda: True
3957db96d56Sopenharmony_ci
3967db96d56Sopenharmony_ci        class Class(metaclass=Metaclass):
3977db96d56Sopenharmony_ci            def attribute():
3987db96d56Sopenharmony_ci                return False
3997db96d56Sopenharmony_ci
4007db96d56Sopenharmony_ci        def f():
4017db96d56Sopenharmony_ci            return Class.attribute()
4027db96d56Sopenharmony_ci
4037db96d56Sopenharmony_ci        for _ in range(1025):
4047db96d56Sopenharmony_ci            self.assertTrue(f())
4057db96d56Sopenharmony_ci
4067db96d56Sopenharmony_ci    def test_metaclass_swap(self):
4077db96d56Sopenharmony_ci        class OldMetaclass(type):
4087db96d56Sopenharmony_ci            @property
4097db96d56Sopenharmony_ci            def attribute(self):
4107db96d56Sopenharmony_ci                return lambda: True
4117db96d56Sopenharmony_ci
4127db96d56Sopenharmony_ci        class NewMetaclass(type):
4137db96d56Sopenharmony_ci            @property
4147db96d56Sopenharmony_ci            def attribute(self):
4157db96d56Sopenharmony_ci                return lambda: False
4167db96d56Sopenharmony_ci
4177db96d56Sopenharmony_ci        class Class(metaclass=OldMetaclass):
4187db96d56Sopenharmony_ci            pass
4197db96d56Sopenharmony_ci
4207db96d56Sopenharmony_ci        def f():
4217db96d56Sopenharmony_ci            return Class.attribute()
4227db96d56Sopenharmony_ci
4237db96d56Sopenharmony_ci        for _ in range(1025):
4247db96d56Sopenharmony_ci            self.assertTrue(f())
4257db96d56Sopenharmony_ci
4267db96d56Sopenharmony_ci        Class.__class__ = NewMetaclass
4277db96d56Sopenharmony_ci
4287db96d56Sopenharmony_ci        for _ in range(1025):
4297db96d56Sopenharmony_ci            self.assertFalse(f())
4307db96d56Sopenharmony_ci
4317db96d56Sopenharmony_ci
4327db96d56Sopenharmony_ciif __name__ == "__main__":
4337db96d56Sopenharmony_ci    import unittest
4347db96d56Sopenharmony_ci    unittest.main()
435