#include #include "object_test.h" #include "flag_enum_test.h" TEST(test_object, derived) { auto test_obj = mirai::make_obj(); auto test_obj2 = mirai::make_obj(); // 检查类型信息 // test_obj应该继承自mirai::object EXPECT_TRUE(test_obj->is()); EXPECT_TRUE(test_obj2->is()); // test_obj应该是test_class1类型,但不是test_class2类型 EXPECT_TRUE(test_obj->is()); EXPECT_FALSE(test_obj->is()); // test_obj2应该是test_class2类型,也是test_class1类型 EXPECT_TRUE(test_obj2->is()); EXPECT_TRUE(test_obj2->is()); // test_obj的类型名称检查 EXPECT_EQ(test_obj->type_name(), "class test_class1"); EXPECT_EQ(test_obj2->type_name(), "class test_class2"); } TEST(test_flag_enum, basic_operations) { my_enum1 flags = my_enum1::apple | my_enum1::banana; // 检查按位或操作 EXPECT_EQ(flags & my_enum1::apple, my_enum1::apple); EXPECT_EQ(flags & my_enum1::banana, my_enum1::banana); EXPECT_EQ(flags & my_enum1::cherry, static_cast(0)); // 检查按位与操作 flags &= my_enum1::apple; EXPECT_EQ(flags, my_enum1::apple); // 检查按位异或操作 flags ^= my_enum1::banana; EXPECT_EQ(flags, my_enum1::apple | my_enum1::banana); // 检查按位非操作 auto not_flags = ~flags; EXPECT_EQ(not_flags & my_enum1::cherry, my_enum1::cherry); // 检查标志存在性 auto has_apple = has_flag(flags, my_enum1::apple); EXPECT_TRUE(has_apple); // 检查标志计数 auto count = count_flags(flags); EXPECT_EQ(count, 1); // 检查设置和清除标志 set_flag(flags, my_enum1::cherry); EXPECT_TRUE(has_flag(flags, my_enum1::cherry)); // 清除标志 clear_flag(flags, my_enum1::banana); EXPECT_FALSE(has_flag(flags, my_enum1::banana)); // 条件设置标志 set_flag_if(flags, my_enum1::banana, false); EXPECT_FALSE(has_flag(flags, my_enum1::banana)); // 条件清除标志 set_flag_if(flags, my_enum1::banana, true); EXPECT_TRUE(has_flag(flags, my_enum1::banana)); // 检查是否为空 EXPECT_FALSE(is_empty(flags)); // 清除所有标志 flags = static_cast(0); EXPECT_TRUE(is_empty(flags)); // 检查底层值转换 auto underlying = to_underlying(my_enum1::apple | my_enum1::banana); EXPECT_EQ(underlying, 1); } TEST(test_property, basic_operations) { auto test_obj = mirai::make_obj(); test_obj->set_a(10); auto a = test_obj->get_a(); EXPECT_EQ(a, 10); }