#include #include "libslic3r/Preset.hpp" #include "libslic3r/PrintConfig.hpp" #include using namespace Slic3r; // Regression test for the python-plugin branch's intentional divergence from // upstream in add_correct_opts_to_diff() (src/libslic3r/Preset.cpp): a vector // option entry whose index is beyond the reference vector's length is reported // dirty even when it duplicates an existing value. On main these duplicates // were NOT flagged. See the comment on add_correct_opts_to_diff() in src/libslic3r/Preset.cpp. TEST_CASE("deep_diff flags new vector entries that duplicate values[0]", "[PresetDiff][Config]") { // reference: single-extruder vector (one entry) Preset reference(Preset::TYPE_PRINTER, "ref"); reference.config.set_key_value("nozzle_diameter", new ConfigOptionFloats{0.4}); // edited: a second extruder entry was added whose value duplicates the first Preset edited(Preset::TYPE_PRINTER, "edited"); edited.config.set_key_value("nozzle_diameter", new ConfigOptionFloats{0.4, 0.4}); // deep_compare = true routes through deep_diff() -> add_correct_opts_to_diff() std::vector diff = PresetCollection::dirty_options(&edited, &reference, /*deep_compare=*/true); // The new index #1 is reported dirty even though 0.4 == values[0] (0.4). REQUIRE(std::find(diff.begin(), diff.end(), "nozzle_diameter#1") != diff.end()); // Sanity: the unchanged existing index #0 is NOT reported, so the rule is // specific to new indices rather than flagging the whole vector. REQUIRE(std::find(diff.begin(), diff.end(), "nozzle_diameter#0") == diff.end()); }