Files
OrcaSlicer/tests/libnest2d/libnest2d_tests.cpp
T
Hanif Koh 0a30cfe6b0 Remove Unused Project Includes and Forward-Declare Where a Type Is Only Referenced
Generated with include-what-you-use and applied conservatively. Only OrcaSlicer's own headers, the ones under src/ and tests/, are removed or forward-declared; standard-library and third-party includes are left alone. An include is removed only when both the Release and the Debug configuration leave it unused, never from inside a conditional block, and never from a file with platform-specific blocks, which only gain includes. Files whose only use of a header sits behind a feature or debug macro (libvgcode's OpenGL ES and marker code, the ARACHNE/TESTS_EXPORT_SVGS debug output) keep their includes.

clonable_ptr.hpp gains #pragma once; it had no include guard and was only safe while Config.hpp was its sole includer.
2026-10-03 22:45:55 +08:00

58 lines
1.7 KiB
C++

#include <catch2/catch_all.hpp>
#include "libnest2d/libnest2d.hpp"
#include <vector>
#include <cstddef>
#include "libnest2d/nester.hpp"
#include <catch2/catch_test_macros.hpp>
#include "libnest2d_test_utils.hpp"
#include "libnest2d/backends/libslic3r/geometries.hpp"
#include "libnest2d/placers/nfpplacer.hpp"
#include "libslic3r/Point.hpp"
using namespace libnest2d;
// Basic behaviour of the Item type and the high-level nest() entry point:
// items copy independently, and nest() leaves degenerate or oversized items
// untouched.
TEST_CASE("Item construction and copy", "[Nesting]") {
Item sh = { {0, 0}, {1, 0}, {1, 1}, {0, 1} };
REQUIRE(sh.vertexCount() == 4u);
Item sh2({ {0, 0}, {1, 0}, {1, 1}, {0, 1} });
REQUIRE(sh2.vertexCount() == 4u);
Item sh3 = sh2; // copy
REQUIRE(sh3.vertexCount() == 4u);
sh2 = {}; // clearing the original leaves the copy intact
REQUIRE(sh2.vertexCount() == 0u);
REQUIRE(sh3.vertexCount() == 4u);
}
TEST_CASE("nest() leaves an empty or zero-area item untouched", "[Nesting]") {
auto bin = Box(250000000, 210000000);
std::vector<Item> items;
items.emplace_back(Item{}); // empty item
items.emplace_back(Item{ {0, 200} }); // zero-area item
size_t bins = nest(items, bin);
REQUIRE(bins == 0u);
for (const auto &itm : items) REQUIRE(itm.binId() == BIN_ID_UNSET);
}
TEST_CASE("nest() leaves an item larger than the bin untouched", "[Nesting]") {
auto bin = Box(250000000, 210000000);
std::vector<Item> items;
items.emplace_back(RectangleItem{250000001, 210000001}); // larger than the bin
size_t bins = nest(items, bin);
REQUIRE(bins == 0u);
REQUIRE(items.front().binId() == BIN_ID_UNSET);
}