Matrix: add proper print function testing

Before the print function was just implicitly called somewhere
and that's why we had 100% line coverage. With this we have actual
testing of the functions.
This commit is contained in:
Matthias Grob
2019-09-17 17:37:41 +02:00
committed by Julian Kent
parent b0b7d7229a
commit 33a629105c
2 changed files with 43 additions and 4 deletions
+5 -4
View File
@@ -322,18 +322,19 @@ public:
const Matrix<Type, M, N> &self = *this;
for (size_t i = 0; i < M; i++) {
for (size_t j = 0; j < N; j++) {
snprintf(buf + strlen(buf), n - strlen(buf), "\t%8.2g", double(self(i, j))); // directly append to the string buffer
snprintf(buf + strlen(buf), n - strlen(buf), "\t%8.8g", double(self(i, j))); // directly append to the string buffer
}
snprintf(buf + strlen(buf), n - strlen(buf), "\n");
}
}
void print() const
void print(FILE *stream = stdout) const
{
static const size_t n = 11*N*M + M; // for every entry a tab and 10 digits, for every row a newline
// element: tab, point, 8 digits; row: newline; string: \0 end
static const size_t n = 10*N*M + M + 1;
char * buf = new char[n];
write_string(buf, n);
printf("%s\n", buf);
fprintf(stream, "%s\n", buf);
delete[] buf;
}
+38
View File
@@ -132,6 +132,44 @@ int main()
m7.setNaN();
TEST(m7 != m8);
// check write_string()
float comma[6] = {
1.f, 12345.678f,
12345.67891f, 12345.67891f,
1112345.67891f, 12345.111111111f
};
Matrix<float, 3, 2> Comma(comma);
const size_t len = 10*2*3 + 2 + 1;
char buffer[len];
Comma.write_string(buffer, len);
char output[] = "\t 1\t12345.678\n\t12345.679\t12345.679\n\t1112345.6\t12345.111\n";
for (size_t i = 0; i < len; i++) {
TEST(buffer[i] == output[i]);
if (buffer[i] == '\0') {
break;
}
}
// check print()
// write
FILE *fp = fopen("testoutput.txt", "w+");
TEST(fp != nullptr);
Comma.print(fp);
TEST(!fclose(fp));
// read
fp = fopen("testoutput.txt", "r");
TEST(fp != nullptr);
TEST(!fseek(fp, 0, SEEK_SET));
for (size_t i = 0; i < len; i++) {
char c = static_cast<char>(fgetc(fp));
if (c == '\n') {
break;
}
printf("%d %d %c\n", static_cast<int>(i), c, c);
TEST(c == output[i]);
}
TEST(!fclose(fp));
return 0;
}