#include #include "../c++/data.hpp" #include "../c++/data_math.hpp" #include "../c++/math.hpp" #include "../c++/csv.hpp" #include namespace { namespace sch { using namespace saw::schema; } /* SAW_TEST("Math/Basic"){ using namespace saw; data> a; data> b; auto c = a + b; } */ SAW_TEST("Math/Tensor"){ using namespace saw; data > a; { a.at({{0u,0u}}) = 1.0; a.at({{0u,1u}}) = 2.0; a.at({{1u,0u}}) = 3.0; a.at({{1u,1u}}) = 4.0; } data > b; { b.at({{0u,0u}}) = 2.0; b.at({{0u,1u}}) = 3.0; b.at({{1u,0u}}) = 4.0; b.at({{1u,1u}}) = 5.0; } auto c = a + b; { SAW_EXPECT(c.at({{0u,0u}}).get() == 3.0, std::string{"Unexpected value at (0,0): "} + std::to_string(c.at({{0u,0u}}).get()) ); SAW_EXPECT(c.at({{0u,1u}}).get() == 5.0, std::string{"Unexpected value at (0,1): "} + std::to_string(c.at({{0u,1u}}).get())); SAW_EXPECT(c.at({{1u,0u}}).get() == 7.0, std::string{"Unexpected value at (1,0): "} + std::to_string(c.at({{1u,0u}}).get())); SAW_EXPECT(c.at({{1u,1u}}).get() == 9.0, std::string{"Unexpected value at (1,1): "} + std::to_string(c.at({{1u,1u}}).get())); } auto d = b - a; { SAW_EXPECT(d.at({{0u,0u}}).get() == 1.0, std::string{"Unexpected value at (0,0): "} + std::to_string(d.at({{0u,0u}}).get()) ); SAW_EXPECT(d.at({{0u,1u}}).get() == 1.0, std::string{"Unexpected value at (0,1): "} + std::to_string(d.at({{0u,1u}}).get())); SAW_EXPECT(d.at({{1u,0u}}).get() == 1.0, std::string{"Unexpected value at (1,0): "} + std::to_string(d.at({{1u,0u}}).get())); SAW_EXPECT(d.at({{1u,1u}}).get() == 1.0, std::string{"Unexpected value at (1,1): "} + std::to_string(d.at({{1u,1u}}).get())); } } SAW_TEST("Math/Dot"){ using namespace saw; data> a; { a.at({{0u}}) = 2.0; a.at({{1u}}) = 1.0; } data> b; { b.at({{0u}}) = -1.0; b.at({{1u}}) = 5.0; } auto c = math::dot(a,b); SAW_EXPECT(c.at({}).get() == 3.0, std::string{"Unexpected value for dot product "} + std::to_string(c.at({}).get()) ); } }