Commit 5b4d3989 authored by Paul's avatar Paul
Browse files

Add more tests

parent 87446fc4
#include <rtg/shape.hpp> #include <rtg/shape.hpp>
#include <array>
#include <algorithm>
#include <numeric>
#include "test.hpp" #include "test.hpp"
void test_shape_assign() void test_shape_assign()
...@@ -21,6 +24,7 @@ void test_shape_default() ...@@ -21,6 +24,7 @@ void test_shape_default()
void test_shape4() void test_shape4()
{ {
rtg::shape s{rtg::shape::float_type, {100, 32, 8, 8}}; rtg::shape s{rtg::shape::float_type, {100, 32, 8, 8}};
EXPECT(s.packed());
EXPECT(s.type() == rtg::shape::float_type); EXPECT(s.type() == rtg::shape::float_type);
EXPECT(s.lens()[0] == 100); EXPECT(s.lens()[0] == 100);
EXPECT(s.lens()[1] == 32); EXPECT(s.lens()[1] == 32);
...@@ -32,6 +36,59 @@ void test_shape4() ...@@ -32,6 +36,59 @@ void test_shape4()
EXPECT(s.strides()[3] == 1); EXPECT(s.strides()[3] == 1);
EXPECT(s.elements() == 100 * 32 * 8 * 8); EXPECT(s.elements() == 100 * 32 * 8 * 8);
EXPECT(s.bytes() == 100 * 32 * 8 * 8 * sizeof(float)); EXPECT(s.bytes() == 100 * 32 * 8 * 8 * sizeof(float));
EXPECT(s.index({0, 0, 0, 0}) == 0);
EXPECT(s.index({0, 0, 0, 1}) == 1);
EXPECT(s.index({0, 0, 0, 0}) == s.index(0));
EXPECT(s.index({0, 0, 0, 1}) == s.index(1));
EXPECT(s.index({0, 0, 1, 0}) == s.index(8));
EXPECT(s.index({0, 1, 0, 0}) == s.index(8 * 8));
EXPECT(s.index({1, 0, 0, 0}) == s.index(8 * 8 * 32));
EXPECT(s.index(0) == 0);
EXPECT(s.index(1) == 1);
EXPECT(s.index(8) == 8);
EXPECT(s.index(8 * 8) == 8 * 8);
EXPECT(s.index(8 * 8 * 32) == 8 * 8 * 32);
EXPECT(s.index(s.elements() - 1) == s.elements() - 1);
}
void test_shape4_nonpacked()
{
std::vector<std::size_t> lens = {100, 32, 8, 8};
std::array<std::size_t, 4> offsets = {{5, 10, 0, 6}};
std::array<std::size_t, 4> adj_lens = {{0, 0, 0, 0}};
std::transform(
lens.begin(), lens.end(), offsets.begin(), adj_lens.begin(), std::plus<size_t>());
// adj_lens should be: { 105, 42, 8, 14 }
std::vector<std::size_t> strides(4);
strides.back() = 1;
std::partial_sum(
adj_lens.rbegin(), adj_lens.rend() - 1, strides.rbegin() + 1, std::multiplies<std::size_t>());
rtg::shape s{rtg::shape::float_type, lens, strides};
EXPECT(!s.packed());
EXPECT(s.type() == rtg::shape::float_type);
EXPECT(s.lens()[0] == 100);
EXPECT(s.lens()[1] == 32);
EXPECT(s.lens()[2] == 8);
EXPECT(s.lens()[3] == 8);
EXPECT(s.strides()[0] == 4704);
EXPECT(s.strides()[1] == 112);
EXPECT(s.strides()[2] == 14);
EXPECT(s.strides()[3] == 1);
EXPECT(s.elements() == 100 * 32 * 8 * 8);
EXPECT(s.bytes() == sizeof(float) * 469274);
EXPECT(s.index(0) == 0);
EXPECT(s.index(1) == 1);
EXPECT(s.index({0, 0, 0, 0}) == 0);
EXPECT(s.index({0, 0, 0, 1}) == s.index(1));
// TODO: Fix these tests
// EXPECT(s.index({0, 0, 1, 0}) == s.index(8));
// EXPECT(s.index({0, 1, 0, 0}) == s.index(8 * 8));
// EXPECT(s.index({1, 0, 0, 0}) == s.index(8 * 8 * 32));
// EXPECT(s.index(s.elements() - 1) == 469273);
} }
int main() int main()
...@@ -39,4 +96,5 @@ int main() ...@@ -39,4 +96,5 @@ int main()
test_shape_assign(); test_shape_assign();
test_shape_default(); test_shape_default();
test_shape4(); test_shape4();
test_shape4_nonpacked();
} }
...@@ -7,15 +7,19 @@ ...@@ -7,15 +7,19 @@
#ifndef RTG_GUARD_TEST_TEST_HPP #ifndef RTG_GUARD_TEST_TEST_HPP
#define RTG_GUARD_TEST_TEST_HPP #define RTG_GUARD_TEST_TEST_HPP
inline void failed(const char* msg, const char* file, int line) inline void failed(bool b, const char* msg, const char* file, int line)
{ {
if (!b)
std::cout << "FAILED: " << msg << ": " << file << ": " << line << std::endl; std::cout << "FAILED: " << msg << ": " << file << ": " << line << std::endl;
} }
[[gnu::noreturn]] inline void failed_abort(const char* msg, const char* file, int line) inline void failed_abort(bool b, const char* msg, const char* file, int line)
{ {
failed(msg, file, line); if (!b)
{
std::cout << "FAILED: " << msg << ": " << file << ": " << line << std::endl;
std::abort(); std::abort();
}
} }
template <class TLeft, class TRight> template <class TLeft, class TRight>
...@@ -35,13 +39,9 @@ inline void expect_equality(const TLeft& left, ...@@ -35,13 +39,9 @@ inline void expect_equality(const TLeft& left,
} }
// NOLINTNEXTLINE // NOLINTNEXTLINE
#define CHECK(...) \ #define CHECK(...) failed(__VA_ARGS__, #__VA_ARGS__, __FILE__, __LINE__)
if(!(__VA_ARGS__)) \
failed(#__VA_ARGS__, __FILE__, __LINE__)
// NOLINTNEXTLINE // NOLINTNEXTLINE
#define EXPECT(...) \ #define EXPECT(...) failed_abort(__VA_ARGS__, #__VA_ARGS__, __FILE__, __LINE__)
if(!(__VA_ARGS__)) \
failed_abort(#__VA_ARGS__, __FILE__, __LINE__)
// NOLINTNEXTLINE // NOLINTNEXTLINE
#define EXPECT_EQUAL(LEFT, RIGHT) expect_equality(LEFT, RIGHT, #LEFT, #RIGHT, __FILE__, __LINE__) #define EXPECT_EQUAL(LEFT, RIGHT) expect_equality(LEFT, RIGHT, #LEFT, #RIGHT, __FILE__, __LINE__)
// NOLINTNEXTLINE // NOLINTNEXTLINE
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment