mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-07-21 23:00:34 +08:00
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:
committed by
Julian Kent
parent
b0b7d7229a
commit
33a629105c
+5
-4
@@ -322,18 +322,19 @@ public:
|
|||||||
const Matrix<Type, M, N> &self = *this;
|
const Matrix<Type, M, N> &self = *this;
|
||||||
for (size_t i = 0; i < M; i++) {
|
for (size_t i = 0; i < M; i++) {
|
||||||
for (size_t j = 0; j < N; j++) {
|
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");
|
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];
|
char * buf = new char[n];
|
||||||
write_string(buf, n);
|
write_string(buf, n);
|
||||||
printf("%s\n", buf);
|
fprintf(stream, "%s\n", buf);
|
||||||
delete[] buf;
|
delete[] buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -132,6 +132,44 @@ int main()
|
|||||||
m7.setNaN();
|
m7.setNaN();
|
||||||
TEST(m7 != m8);
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user