#include #include #include #include "test.hpp" struct simple_operation { template static auto reflect(T& x, F f) { return migraph::pack(f(x.data, "data")); } int data = 1; std::string name() const { return "simple"; } migraph::shape compute_shape(const std::vector&) const { MIGRAPH_THROW("not computable"); } migraph::argument compute(migraph::context&, const migraph::shape&, const std::vector&) const { MIGRAPH_THROW("not computable"); } friend std::ostream& operator<<(std::ostream& os, const simple_operation& op) { os << op.name() << "[" << op.data << "]"; return os; } }; struct simple_operation_no_print { std::string name() const { return "simple"; } migraph::shape compute_shape(const std::vector&) const { MIGRAPH_THROW("not computable"); } migraph::argument compute(migraph::context&, const migraph::shape&, const std::vector&) const { MIGRAPH_THROW("not computable"); } }; TEST_CASE(operation_copy_test) { simple_operation s{}; migraph::operation op1 = s; // NOLINT migraph::operation op2 = op1; // NOLINT // cppcheck-suppress duplicateExpression EXPECT(s == op1); // cppcheck-suppress duplicateExpression EXPECT(op2 == op1); } TEST_CASE(operation_equal_test) { simple_operation s{}; migraph::operation op1 = s; s.data = 2; migraph::operation op2 = op1; // NOLINT migraph::operation op3 = s; // NOLINT EXPECT(s != op1); EXPECT(op2 == op1); EXPECT(op3 != op2); EXPECT(op3 != op1); } struct not_operation { }; TEST_CASE(operation_any_cast) { migraph::operation op1 = simple_operation{}; EXPECT(migraph::any_cast(op1).data == 1); EXPECT(migraph::any_cast(&op1) == nullptr); EXPECT(test::throws([&] { migraph::any_cast(op1); })); migraph::operation op2 = simple_operation{2}; EXPECT(migraph::any_cast(op2).data == 2); EXPECT(migraph::any_cast(&op2) == nullptr); } TEST_CASE(operation_print) { migraph::operation op = simple_operation{}; std::stringstream ss; ss << op; std::string s = ss.str(); EXPECT(s == "simple[1]"); } TEST_CASE(operation_default_print) { migraph::operation op = simple_operation_no_print{}; std::stringstream ss; ss << op; std::string s = ss.str(); EXPECT(s == "simple"); } int main(int argc, const char* argv[]) { test::run(argc, argv); }