Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Docker-in-Docker (DinD) capabilities of public runners deactivated.
More info
Open sidebar
GRASLAND Hadrien
Fast5x5
Commits
bfd54bf3
Commit
bfd54bf3
authored
May 17, 2017
by
Lucas Serrano
Browse files
Adding some unitary tests
parent
006c4330
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
213 additions
and
0 deletions
+213
-0
tests.cpp
tests.cpp
+213
-0
No files found.
tests.cpp
0 → 100644
View file @
bfd54bf3
#include<iostream>
#include"fast_matrix.hpp"
template
<
typename
T
>
void
print_matrix
(
T
*
matrix
,
int
n
,
int
m
)
{
for
(
int
i
=
0
;
i
<
n
;
i
++
)
{
for
(
int
j
=
0
;
j
<
m
;
j
++
)
{
std
::
cout
<<
matrix
[
i
*
m
+
j
]
<<
(
j
==
m
-
1
?
""
:
", "
);
}
std
::
cout
<<
std
::
endl
;
}
}
void
test_protect_for_division
()
{
alignas
(
32
)
float
input
[
8
]
{
1
,
2
,
3
,
4
,
5
,
0
,
0
,
0
};
alignas
(
32
)
float
output
[
8
];
alignas
(
32
)
float
truth
[
8
]
{
1
,
2
,
3
,
4
,
5
,
1
,
1
,
1
};
using
pack_t
=
bs
::
pack
<
float
,
8
>
;
pack_t
vector
(
&
input
[
0
]);
protect_for_division
<
pack_t
,
5
>
(
vector
);
bs
::
aligned_store
(
vector
,
output
);
std
::
cout
<<
"Testing: Protect for division"
<<
std
::
endl
;
std
::
cout
<<
"
\t
Output: "
<<
vector
<<
std
::
endl
;
std
::
cout
<<
"
\t
Truth: "
<<
pack_t
(
&
truth
[
0
])
<<
std
::
endl
;
std
::
cout
<<
std
::
endl
;
for
(
int
i
=
0
;
i
<
8
;
i
++
)
{
assert
(
output
[
i
]
==
truth
[
i
]);
}
}
void
test_matrix_add
()
{
alignas
(
32
)
float
input_a
[
3
*
3
]
=
{
1
,
2
,
0
,
2
,
5
,
1
,
1
,
1
,
0.1
,
};
alignas
(
32
)
float
input_b
[
3
*
3
]
=
{
2
,
2
,
4
,
1
,
0
,
0.5
,
1
,
1
,
2
,
};
alignas
(
32
)
float
truth
[
3
*
3
]
=
{
3
,
4
,
4
,
3
,
5
,
1.5
,
2
,
2
,
2.1
,
};
BaseMatrix
<
float
,
3
,
8
>
A
(
input_a
),
B
(
input_b
),
C
;
matrix_add
(
A
,
B
,
C
);
float
*
output
=
C
.
dump_array
();
std
::
cout
<<
"Testing: Matrix Add"
<<
std
::
endl
;
std
::
cout
<<
"
\t
Output: "
<<
std
::
endl
;
print_matrix
<
float
>
(
output
,
3
,
3
);
std
::
cout
<<
std
::
endl
;
std
::
cout
<<
"
\t
Truth: "
<<
std
::
endl
;
print_matrix
<
float
>
(
truth
,
3
,
3
);
std
::
cout
<<
std
::
endl
;
}
void
test_matrix_sub
()
{
alignas
(
32
)
float
input_a
[
3
*
3
]
=
{
1
,
2
,
0
,
2
,
5
,
1
,
1
,
1
,
0.1
,
};
alignas
(
32
)
float
input_b
[
3
*
3
]
=
{
2
,
2
,
4
,
1
,
0
,
0.5
,
1
,
1
,
2
,
};
alignas
(
32
)
float
truth
[
3
*
3
]
=
{
-
1
,
0
,
-
4
,
1
,
5
,
0.5
,
0
,
0
,
-
1.9
,
};
BaseMatrix
<
float
,
3
,
8
>
A
(
input_a
),
B
(
input_b
),
C
;
matrix_sub
(
A
,
B
,
C
);
float
*
output
=
C
.
dump_array
();
std
::
cout
<<
"Testing: Matrix sub"
<<
std
::
endl
;
std
::
cout
<<
"
\t
Output: "
<<
std
::
endl
;
print_matrix
<
float
>
(
output
,
3
,
3
);
std
::
cout
<<
std
::
endl
;
std
::
cout
<<
"
\t
Truth: "
<<
std
::
endl
;
print_matrix
<
float
>
(
truth
,
3
,
3
);
std
::
cout
<<
std
::
endl
;
}
void
test_matrix_mul_m_m
()
{
alignas
(
32
)
float
input_a
[
3
*
3
]
=
{
1
,
2
,
0
,
2
,
5
,
1
,
1
,
1
,
0.1
,
};
alignas
(
32
)
float
input_b
[
3
*
3
]
=
{
2
,
2
,
4
,
1
,
0
,
0.5
,
1
,
1
,
2
,
};
alignas
(
32
)
float
truth
[
3
*
3
]
=
{
4
,
2
,
5
,
10
,
5
,
12.5
,
3.1
,
2.1
,
4.7
,
};
BaseMatrix
<
float
,
3
,
8
>
A
(
input_a
),
B
(
input_b
),
C
;
matrix_mul_m_m
(
A
,
B
,
C
);
float
*
output
=
C
.
dump_array
();
std
::
cout
<<
"Testing: Matrix Mul M M"
<<
std
::
endl
;
std
::
cout
<<
"
\t
Output: "
<<
std
::
endl
;
print_matrix
<
float
>
(
output
,
3
,
3
);
std
::
cout
<<
std
::
endl
;
std
::
cout
<<
"
\t
Truth: "
<<
std
::
endl
;
print_matrix
<
float
>
(
truth
,
3
,
3
);
std
::
cout
<<
std
::
endl
;
}
void
test_column_dot_product
()
{
alignas
(
32
)
float
input_a
[
3
*
3
]
=
{
1
,
2
,
0
,
2
,
5
,
1
,
1
,
1
,
3
,
};
alignas
(
32
)
float
input_b
[
3
*
3
]
=
{
2
,
2
,
4
,
1
,
0
,
2
,
1
,
1
,
2
,
};
alignas
(
32
)
float
truth
[
4
]
=
{
5
,
5
,
8
,
0
,
};
using
pack_t
=
bs
::
pack
<
float
,
4
>
;
BaseMatrix
<
float
,
3
,
4
>
A
(
input_a
),
B
(
input_b
);
pack_t
output
=
column_dot_product
(
A
,
B
);
std
::
cout
<<
"Testing: Column dot product"
<<
std
::
endl
;
std
::
cout
<<
"
\t
Output: "
<<
output
<<
std
::
endl
;
std
::
cout
<<
"
\t
Truth: "
<<
pack_t
(
&
truth
[
0
])
<<
std
::
endl
;
std
::
cout
<<
std
::
endl
;
}
void
test_column_scalar_product
()
{
alignas
(
32
)
float
scalar
[
4
]
=
{
1
,
2
,
3
,
4
,
};
alignas
(
32
)
float
input_a
[
3
*
3
]
=
{
1
,
2
,
0
,
2
,
5
,
1
,
1
,
1
,
0.1
,
};
alignas
(
32
)
float
truth
[
3
*
3
]
=
{
1
,
4
,
0
,
2
,
10
,
3
,
1
,
2
,
0.3
,
};
using
pack_t
=
bs
::
pack
<
float
,
4
>
;
BaseMatrix
<
float
,
3
,
4
>
A
(
input_a
),
B
,
C
;
pack_t
vector
(
&
scalar
[
0
]);
column_scalar_product
(
vector
,
A
,
B
);
float
*
output
=
B
.
dump_array
();
std
::
cout
<<
"Testing: Column scalar product"
<<
std
::
endl
;
std
::
cout
<<
"
\t
Output: "
<<
std
::
endl
;
print_matrix
<
float
>
(
output
,
3
,
3
);
std
::
cout
<<
std
::
endl
;
std
::
cout
<<
"
\t
Truth: "
<<
std
::
endl
;
print_matrix
<
float
>
(
truth
,
3
,
3
);
std
::
cout
<<
std
::
endl
;
}
void
test_identity
()
{
IdentityMatrix
<
float
,
5
,
8
>
A
;
std
::
cout
<<
"Testing identity matrix"
<<
std
::
endl
;
std
::
cout
<<
A
;
}
int
main
(
int
argc
,
char
**
argv
)
{
test_protect_for_division
();
test_matrix_add
();
test_matrix_sub
();
test_matrix_mul_m_m
();
test_column_dot_product
();
test_column_scalar_product
();
test_identity
();
return
0
;
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment