1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
#include <iostream>
#define BOOST_TEST_MAIN
#include <boost/test/included/unit_test.hpp>
#include <boost/test/floating_point_comparison.hpp>
#include <cmath>
#include "../simd_unary_arithmetic.hpp"
#include "test_helper.hpp"
#include "../benchmarks/cache_aligned_array.hpp"
using namespace nova;
using namespace std;
static const int size = 1024;
#define COMPARE_TEST(name) \
template <typename float_type> \
void test_##name(void) \
{ \
aligned_array<float_type, size> sseval, mpval, generic, args; \
randomize_buffer<float_type>(args.c_array(), size); \
\
name##_vec(generic.c_array(), args.c_array(), size); \
name##_vec_simd(sseval.c_array(), args.c_array(), size); \
name##_vec_simd<size>(mpval.c_array(), args.c_array()); \
\
for (int i = 0; i != size; ++i) \
BOOST_CHECK_CLOSE( sseval[i], generic[i], 0.0001 ); \
for (int i = 0; i != size; ++i) \
BOOST_CHECK_CLOSE( mpval[i], generic[i], 0.0001 ); \
} \
\
BOOST_AUTO_TEST_CASE( name##_tests_float ) \
{ \
test_##name<float>(); \
} \
\
BOOST_AUTO_TEST_CASE( name##_tests_double ) \
{ \
test_##name<double>(); \
}
COMPARE_TEST(round)
COMPARE_TEST(ceil)
COMPARE_TEST(floor)
COMPARE_TEST(frac)
COMPARE_TEST(trunc)
|