ConceptCore/ccl/core/test/src/testRSOperationsFacet.cpp
2024-04-15 22:16:14 +03:00

55 lines
1.8 KiB
C++

#define GTEST_LANG_CXX11 1
#include "gtest/gtest.h"
#include "ccl/semantic/RSForm.h"
#include "RSLHelper.hpp"
class UTRSOperationsFacet: public ::testing::Test {
protected:
using CstType = ccl::semantic::CstType;
using EquationOptions = ccl::ops::EquationOptions;
using RSForm = ccl::semantic::RSForm;
using rsOperationFacet = ccl::semantic::rsOperationFacet;
protected:
RSForm schema{};
rsOperationFacet& ops{ schema.Ops() };
const ccl::EntityUID x1{ schema.Emplace(CstType::base) };
const ccl::EntityUID x2{ schema.Emplace(CstType::base) };
const ccl::EntityUID s1{ schema.Emplace(CstType::structured, "B(X1)"_rs) };
};
TEST_F(UTRSOperationsFacet, Merge) {
const RSForm copy = schema;
const auto size = std::ssize(schema.Core());
const auto translations = ops.MergeWith(copy);
EXPECT_EQ(std::ssize(translations), size);
EXPECT_EQ(std::ssize(schema.Core()), 2 * size);
EXPECT_NE(translations(x1), x1);
EXPECT_NE(translations(x2), x2);
EXPECT_NE(translations(s1), s1);
}
TEST_F(UTRSOperationsFacet, MergeSelf) {
const auto size = std::ssize(schema.Core());
const auto translations = ops.MergeWith(schema);
EXPECT_EQ(std::ssize(translations), size);
EXPECT_EQ(std::ssize(schema.Core()), 2 * size);
}
TEST_F(UTRSOperationsFacet, IsEquatable) {
EXPECT_TRUE(ops.IsEquatable(EquationOptions{ x1, x2 }));
EXPECT_TRUE(ops.IsEquatable(EquationOptions{ x2, s1 }));
EXPECT_FALSE(ops.IsEquatable(EquationOptions{ x1, s1 }));
EXPECT_FALSE(ops.IsEquatable(EquationOptions{}));
EXPECT_FALSE(ops.IsEquatable(EquationOptions{ x1, x1 }));
}
TEST_F(UTRSOperationsFacet, Equate) {
EXPECT_FALSE(ops.Equate(EquationOptions{}).has_value());
EXPECT_FALSE(ops.Equate(EquationOptions{x1, x1}).has_value());
EXPECT_TRUE(ops.Equate(EquationOptions{x1, x2}).has_value());
EXPECT_FALSE(schema.Contains(x1));
EXPECT_TRUE(schema.Contains(x2));
}