Some debugging code (asserts) for the optimized G-code number formatter.
This commit is contained in:
parent
1603d7a2c8
commit
ecd71e3e80
@ -533,9 +533,8 @@ std::string GCodeWriter::set_fan(unsigned int speed) const
|
|||||||
return GCodeWriter::set_fan(this->config.gcode_flavor, this->config.gcode_comments, speed);
|
return GCodeWriter::set_fan(this->config.gcode_flavor, this->config.gcode_comments, speed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void GCodeFormatter::emit_axis(const char axis, const double v, size_t digits) {
|
void GCodeFormatter::emit_axis(const char axis, const double v, size_t digits) {
|
||||||
assert(digits <= 6);
|
assert(digits <= 9);
|
||||||
static constexpr const std::array<int, 10> pow_10{1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000};
|
static constexpr const std::array<int, 10> pow_10{1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000};
|
||||||
*ptr_err.ptr++ = ' '; *ptr_err.ptr++ = axis;
|
*ptr_err.ptr++ = ' '; *ptr_err.ptr++ = axis;
|
||||||
|
|
||||||
@ -576,6 +575,21 @@ void GCodeFormatter::emit_axis(const char axis, const double v, size_t digits) {
|
|||||||
if ((this->ptr_err.ptr + 1) == base_ptr || *this->ptr_err.ptr == '-')
|
if ((this->ptr_err.ptr + 1) == base_ptr || *this->ptr_err.ptr == '-')
|
||||||
*(++this->ptr_err.ptr) = '0';
|
*(++this->ptr_err.ptr) = '0';
|
||||||
this->ptr_err.ptr++;
|
this->ptr_err.ptr++;
|
||||||
|
|
||||||
|
#if 0 // #ifndef NDEBUG
|
||||||
|
{
|
||||||
|
// Verify that the optimized formatter produces the same result as the standard sprintf().
|
||||||
|
double v1 = atof(std::string(base_ptr, this->ptr_err.ptr).c_str());
|
||||||
|
char buf[2048];
|
||||||
|
sprintf(buf, "%.*lf", int(digits), v);
|
||||||
|
double v2 = atof(buf);
|
||||||
|
// Numbers may differ when rounding at exactly or very close to 0.5 due to numerical issues when scaling the double to an integer.
|
||||||
|
// Thus the complex assert.
|
||||||
|
// assert(v1 == v2);
|
||||||
|
assert(std::abs(v1 - v) * pow_10[digits] < 0.50001);
|
||||||
|
assert(std::abs(v2 - v) * pow_10[digits] < 0.50001);
|
||||||
|
}
|
||||||
|
#endif // NDEBUG
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Slic3r
|
} // namespace Slic3r
|
||||||
|
Loading…
Reference in New Issue
Block a user