Files
mirai/tests/main.cpp

91 lines
2.5 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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);
}