#include #include #include "libslic3r/GCodeWriter.hpp" using namespace Slic3r; SCENARIO("set_speed emits values with fixed-point output.", "[GCodeWriter]") { GIVEN("GCodeWriter instance") { GCodeWriter writer; WHEN("set_speed is called to set speed to 99999.123") { THEN("Output string is G1 F99999.123") { REQUIRE_THAT(writer.set_speed(99999.123), Catch::Matchers::Equals("G1 F99999.123\n")); } } WHEN("set_speed is called to set speed to 1") { THEN("Output string is G1 F1") { REQUIRE_THAT(writer.set_speed(1.0), Catch::Matchers::Equals("G1 F1\n")); } } WHEN("set_speed is called to set speed to 203.200022") { THEN("Output string is G1 F203.2") { REQUIRE_THAT(writer.set_speed(203.200022), Catch::Matchers::Equals("G1 F203.2\n")); } } WHEN("set_speed is called to set speed to 203.200522") { THEN("Output string is G1 F203.201") { REQUIRE_THAT(writer.set_speed(203.200522), Catch::Matchers::Equals("G1 F203.201\n")); } } } } SCENARIO("z_hop lifts the nozzle when a lift is requested", "[GCodeWriter]") { GIVEN("A writer with the nozzle parked at Z = 10") { GCodeWriter writer; std::vector extruder_ids { 0 }; writer.set_extruders(extruder_ids); writer.set_extruder(0); writer.travel_to_z(10.0); WHEN("z_hop is 1 and an eager lift is requested") { writer.config.z_hop.values = { 1.0 }; std::string gcode = writer.eager_lift(LiftType::NormalLift); THEN("a Z move up by z_hop is emitted") { REQUIRE_THAT(gcode, Catch::Matchers::ContainsSubstring("Z11")); } } WHEN("z_hop is 0") { writer.config.z_hop.values = { 0.0 }; std::string gcode = writer.eager_lift(LiftType::NormalLift); THEN("no lift is emitted") { REQUIRE(gcode.empty()); } } } }