tesseract v5.3.3.20231005
tesseract::IntSimdMatrixTest Class Reference
Inheritance diagram for tesseract::IntSimdMatrixTest:
testing::Test testing::Test

Protected Member Functions

void SetUp () override
 
GENERIC_2D_ARRAY< int8_t > InitRandom (int no, int ni)
 
std::vector< int8_t > RandomVector (int size, const IntSimdMatrix &matrix)
 
std::vector< TFloatRandomScales (int size)
 
void ExpectEqualResults (const IntSimdMatrix &matrix)
 
- Protected Member Functions inherited from testing::Test
 Test ()
 
virtual void SetUp ()
 
virtual void TearDown ()
 

Protected Attributes

TRand random_
 

Additional Inherited Members

- Public Member Functions inherited from testing::Test
virtual ~Test ()
 
- Static Public Member Functions inherited from testing::Test
static void SetUpTestSuite ()
 
static void TearDownTestSuite ()
 
static void TearDownTestCase ()
 
static void SetUpTestCase ()
 
static bool HasFatalFailure ()
 
static bool HasNonfatalFailure ()
 
static bool IsSkipped ()
 
static bool HasFailure ()
 
static void RecordProperty (const std::string &key, const std::string &value)
 
static void RecordProperty (const std::string &key, int value)
 

Detailed Description

Definition at line 29 of file intsimdmatrix_test.cc.

Member Function Documentation

◆ ExpectEqualResults()

void tesseract::IntSimdMatrixTest::ExpectEqualResults ( const IntSimdMatrix matrix)
inlineprotected

Definition at line 63 of file intsimdmatrix_test.cc.

63 {
64 TFloat total = 0.0;
65 for (int num_out = 1; num_out < 130; ++num_out) {
66 for (int num_in = 1; num_in < 130; ++num_in) {
67 GENERIC_2D_ARRAY<int8_t> w = InitRandom(num_out, num_in + 1);
68 std::vector<int8_t> u = RandomVector(num_in, matrix);
69 std::vector<TFloat> scales = RandomScales(num_out);
70 int ro = num_out;
73 }
74 std::vector<TFloat> base_result(num_out);
75 IntSimdMatrix::MatrixDotVector(w, scales, u.data(), base_result.data());
76 std::vector<TFloat> test_result(ro);
77 std::vector<int8_t> shaped_wi;
78 int32_t rounded_num_out;
79 matrix.Init(w, shaped_wi, rounded_num_out);
80 scales.resize(rounded_num_out);
81 if (matrix.matrixDotVectorFunction) {
82 matrix.matrixDotVectorFunction(w.dim1(), w.dim2(), &shaped_wi[0], &scales[0], &u[0],
83 &test_result[0]);
84 } else {
85 IntSimdMatrix::MatrixDotVector(w, scales, u.data(), test_result.data());
86 }
87 for (int i = 0; i < num_out; ++i) {
88 EXPECT_FLOAT_EQ(base_result[i], test_result[i]) << "i=" << i;
89 total += base_result[i];
90 }
91 }
92 }
93 // Compare sum of all results with expected value.
94#ifdef FAST_FLOAT
95 EXPECT_FLOAT_EQ(total, 337852.16f);
96#else
97 EXPECT_FLOAT_EQ(total, 337849.39354684710);
98#endif
99 }
#define EXPECT_FLOAT_EQ(val1, val2)
Definition: gtest.h:2144
double TFloat
Definition: tesstypes.h:39
int RoundOutputs(int size) const
Definition: intsimdmatrix.h:74
static void MatrixDotVector(const GENERIC_2D_ARRAY< int8_t > &w, const std::vector< TFloat > &scales, const int8_t *u, TFloat *v)
static const IntSimdMatrix * intSimdMatrix
std::vector< int8_t > RandomVector(int size, const IntSimdMatrix &matrix)
std::vector< TFloat > RandomScales(int size)
GENERIC_2D_ARRAY< int8_t > InitRandom(int no, int ni)

◆ InitRandom()

GENERIC_2D_ARRAY< int8_t > tesseract::IntSimdMatrixTest::InitRandom ( int  no,
int  ni 
)
inlineprotected

Definition at line 36 of file intsimdmatrix_test.cc.

36 {
37 GENERIC_2D_ARRAY<int8_t> a(no, ni, 0);
38 for (int i = 0; i < no; ++i) {
39 for (int j = 0; j < ni; ++j) {
40 a(i, j) = static_cast<int8_t>(random_.SignedRand(INT8_MAX));
41 }
42 }
43 return a;
44 }
TRand random_

◆ RandomScales()

std::vector< TFloat > tesseract::IntSimdMatrixTest::RandomScales ( int  size)
inlineprotected

Definition at line 55 of file intsimdmatrix_test.cc.

55 {
56 std::vector<TFloat> v(size);
57 for (int i = 0; i < size; ++i) {
58 v[i] = (1.0 + random_.SignedRand(1.0)) / INT8_MAX;
59 }
60 return v;
61 }

◆ RandomVector()

std::vector< int8_t > tesseract::IntSimdMatrixTest::RandomVector ( int  size,
const IntSimdMatrix matrix 
)
inlineprotected

Definition at line 46 of file intsimdmatrix_test.cc.

46 {
47 int rounded_size = matrix.RoundInputs(size);
48 std::vector<int8_t> v(rounded_size, 0);
49 for (int i = 0; i < size; ++i) {
50 v[i] = static_cast<int8_t>(random_.SignedRand(INT8_MAX));
51 }
52 return v;
53 }

◆ SetUp()

void tesseract::IntSimdMatrixTest::SetUp ( )
inlineoverrideprotectedvirtual

Reimplemented from testing::Test.

Definition at line 31 of file intsimdmatrix_test.cc.

31 {
32 std::locale::global(std::locale(""));
33 }

Member Data Documentation

◆ random_

TRand tesseract::IntSimdMatrixTest::random_
protected

Definition at line 101 of file intsimdmatrix_test.cc.


The documentation for this class was generated from the following file: