91 lines
2.5 KiB
C++
91 lines
2.5 KiB
C++
#include <gtest/gtest.h>
|
||
#include "object_test.h"
|
||
#include "flag_enum_test.h"
|
||
|
||
TEST(test_object, derived) {
|
||
auto test_obj = mirai::make_obj<test_class1>();
|
||
auto test_obj2 = mirai::make_obj<test_class2>();
|
||
|
||
// 检查类型信息
|
||
|
||
// test_obj应该继承自mirai::object
|
||
EXPECT_TRUE(test_obj->is<mirai::object>());
|
||
EXPECT_TRUE(test_obj2->is<mirai::object>());
|
||
|
||
// test_obj应该是test_class1类型,但不是test_class2类型
|
||
EXPECT_TRUE(test_obj->is<test_class1>());
|
||
EXPECT_FALSE(test_obj->is<test_class2>());
|
||
|
||
// test_obj2应该是test_class2类型,也是test_class1类型
|
||
EXPECT_TRUE(test_obj2->is<test_class2>());
|
||
EXPECT_TRUE(test_obj2->is<test_class1>());
|
||
|
||
// 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<my_enum1>(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<my_enum1>(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_class1>();
|
||
|
||
test_obj->set_a(10);
|
||
auto a = test_obj->get_a();
|
||
EXPECT_EQ(a, 10);
|
||
}
|