#include #include #include "api.hpp" #include "isaac/array.h" #include "clBLAS.h" #include "cublas.h" namespace sc = isaac; typedef sc::int_t int_t; template void test_impl(std::string const & ST, simple_vector_base & cx, simple_vector_base & cy, sc::array_base & x, sc::array_base & y, int& nfail, int& npass) { std::string DT = std::is_same::value?"S":"D"; std::string PFX = "[" + DT + "," + ST + "]"; sc::driver::Context const & context = x.context(); T cs = 0; sc::scalar ds(cs, context); int_t N = cx.size(); sc::array scratch(N, x.dtype()); ADD_TEST_1D_RD(PFX + " s = x'.y", cs+=cx[i]*cy[i], 0, cs, ds = dot(x,y)); ADD_TEST_1D_RD(PFX + " s = exp(x'.y)", cs += cx[i]*cy[i], 0, std::exp(cs), ds = exp(dot(x,y))); ADD_TEST_1D_RD(PFX + " s = 1 + x'.y", cs += cx[i]*cy[i], 0, 1 + cs, ds = 1 + dot(x,y)); ADD_TEST_1D_RD(PFX + " s = x'.y + y'.y", cs+= cx[i]*cy[i] + cy[i]*cy[i], 0, cs, ds = dot(x,y) + dot(y,y)); ADD_TEST_1D_RD(PFX + " s = max(x)", cs = std::max(cs, cx[i]), std::numeric_limits::min(), cs, ds = max(x)); ADD_TEST_1D_RD(PFX + " s = min(x)", cs = std::min(cs, cx[i]), std::numeric_limits::max(), cs, ds = min(x)); } template void test(sc::driver::Context const & ctx, int& nfail, int& npass) { int_t N = 10007; int_t SUBN = 7; INIT_VECTOR(N, SUBN, 0, 1, cx, x, ctx); INIT_VECTOR(N, SUBN, 0, 1, cy, y, ctx); test_impl("FULL", cx, cy, x, y, nfail, npass); test_impl("SUB", cx_s, cy_s, x_s, y_s, nfail, npass); } int main() { return run_test(test, test); }