116 lines
2.7 KiB
C++
116 lines
2.7 KiB
C++
// 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;
|
|
|
|
}
|
|
|
|
|