// Copyright (C) 2009 Davis E. King (davis@dlib.net) // License: Boost Software License See LICENSE.txt for the full license. #include "../tester.h" #include <dlib/geometry.h> #include <dlib/matrix.h> #ifndef DLIB_USE_BLAS #error "BLAS bindings must be used for this test to make any sense" #endif namespace dlib { namespace blas_bindings { #ifdef DLIB_TEST_BLAS_BINDINGS extern int& counter_gemm(); extern int& counter_gemv(); extern int& counter_ger(); extern int& counter_dot(); #endif } } namespace { using namespace test; using namespace std; // Declare the logger we will use in this test. The name of the logger // should start with "test." dlib::logger dlog("test.vector"); class vector_tester : public tester { public: vector_tester ( ) : tester ( "test_vector", // the command line argument name for this test "Run tests on dlib::vector.", // the command line argument description 0 // the number of command line arguments for this test ) {} template <typename type> void test_vector( ) const { using namespace dlib; using namespace dlib::blas_bindings; dlib::vector<type,2> a2, b2, c2; dlib::vector<type,3> a3, b3, c3; matrix<type> mat2(2,2), mat3(3,3); mat2 = 0; mat3 = 0; type var = 0; // We want to make sure that the BLAS bindings are being called for the 2D and 3D vectors. That would // be very slow. counter_gemm() = 0; counter_gemv() = 0; counter_ger() = 0; counter_dot() = 0; var = trans(a2)*(a2); var = dot(a2,a2); a2 = mat2*b2; var = trans(b2)*mat2*b2; var = trans(a3)*(a3); var = dot(a3,a3); a3 = mat3*b3; var = trans(b3)*mat3*b3; mat3 = c3*trans(a3); mat2 = c2*trans(a2); DLIB_TEST(counter_gemm() == 0 && counter_gemv() == 0 && counter_ger() == 0 && counter_dot() == 0); } void perform_test ( ) { using namespace dlib; dlog << dlib::LINFO << "test double"; test_vector<double>(); dlog << dlib::LINFO << "test float"; test_vector<float>(); dlog << dlib::LINFO << "test int"; test_vector<int>(); dlog << dlib::LINFO << "test short"; test_vector<short>(); print_spinner(); } }; vector_tester a; }