32 std::locale::global(std::locale(
""));
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));
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));
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;
65 for (
int num_out = 1; num_out < 130; ++num_out) {
66 for (
int num_in = 1; num_in < 130; ++num_in) {
74 std::vector<TFloat> base_result(num_out);
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);
87 for (
int i = 0;
i < num_out; ++
i) {
89 total += base_result[
i];
107 ExpectEqualResults(matrix);
112#if defined(HAVE_SSE4_1)
126#if defined(HAVE_AVX2)
#define EXPECT_FLOAT_EQ(val1, val2)
#define GTEST_LOG_(severity)
TEST_F(EuroText, FastLatinOCR)
static const IntSimdMatrix intSimdMatrixAVX2
int RoundOutputs(int size) const
static void MatrixDotVector(const GENERIC_2D_ARRAY< int8_t > &w, const std::vector< TFloat > &scales, const int8_t *u, TFloat *v)
int RoundInputs(int size) const
MatrixDotVectorFunction matrixDotVectorFunction
static const IntSimdMatrix * intSimdMatrix
static const IntSimdMatrix intSimdMatrixSSE
void Init(const GENERIC_2D_ARRAY< int8_t > &w, std::vector< int8_t > &shaped_w, int32_t &rounded_num_out) const
static bool IsSSEAvailable()
static bool IsAVX2Available()
std::vector< int8_t > RandomVector(int size, const IntSimdMatrix &matrix)
std::vector< TFloat > RandomScales(int size)
void ExpectEqualResults(const IntSimdMatrix &matrix)
GENERIC_2D_ARRAY< int8_t > InitRandom(int no, int ni)