pkgsrc-WIP-changes archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
prusaslicer: Update to 2.9.1
Module Name: pkgsrc-wip
Committed By: Paul Ripke <stix%stix.id.au@localhost>
Pushed By: stix
Date: Wed Mar 12 20:11:06 2025 +1100
Changeset: dba8aa82f257ca48366680f4dd4088475ef33d0e
Modified Files:
prusaslicer/Makefile
prusaslicer/PLIST
prusaslicer/distinfo
prusaslicer/patches/patch-src_slic3r_GUI_InstanceCheck.cpp
prusaslicer/patches/patch-src_slic3r_GUI_Plater.cpp
prusaslicer/patches/patch-src_slic3r_GUI_UserAccountCommunication.cpp
prusaslicer/patches/patch-tests_CMakeLists.txt
prusaslicer/patches/patch-tests_libslic3r_test__emboss.cpp
Added Files:
prusaslicer/patches/patch-src_libseqarrange_CMakeLists.txt
Removed Files:
prusaslicer/patches/patch-src_slic3r-arrange-wrapper_CMakeLists.txt
prusaslicer/patches/patch-src_slic3r-arrange_CMakeLists.txt
prusaslicer/patches/patch-src_slic3r_GUI_PhysicalPrinterDialog.cpp
prusaslicer/patches/patch-tests_arrange_test__arrange.cpp
prusaslicer/patches/patch-tests_arrange_test__arrange__integration.cpp
prusaslicer/patches/patch-tests_catch__main.hpp
prusaslicer/patches/patch-tests_fff__print_benchmark__seams.cpp
prusaslicer/patches/patch-tests_fff__print_test__avoid__crossing__perimeters.cpp
prusaslicer/patches/patch-tests_fff__print_test__bridges.cpp
prusaslicer/patches/patch-tests_fff__print_test__cancel__object.cpp
prusaslicer/patches/patch-tests_fff__print_test__clipper.cpp
prusaslicer/patches/patch-tests_fff__print_test__cooling.cpp
prusaslicer/patches/patch-tests_fff__print_test__custom__gcode.cpp
prusaslicer/patches/patch-tests_fff__print_test__data.cpp
prusaslicer/patches/patch-tests_fff__print_test__extrusion__entity.cpp
prusaslicer/patches/patch-tests_fff__print_test__fill.cpp
prusaslicer/patches/patch-tests_fff__print_test__flow.cpp
prusaslicer/patches/patch-tests_fff__print_test__gaps.cpp
prusaslicer/patches/patch-tests_fff__print_test__gcode.cpp
prusaslicer/patches/patch-tests_fff__print_test__gcode__travels.cpp
prusaslicer/patches/patch-tests_fff__print_test__gcodefindreplace.cpp
prusaslicer/patches/patch-tests_fff__print_test__gcodewriter.cpp
prusaslicer/patches/patch-tests_fff__print_test__layers.cpp
prusaslicer/patches/patch-tests_fff__print_test__model.cpp
prusaslicer/patches/patch-tests_fff__print_test__multi.cpp
prusaslicer/patches/patch-tests_fff__print_test__perimeters.cpp
prusaslicer/patches/patch-tests_fff__print_test__print.cpp
prusaslicer/patches/patch-tests_fff__print_test__printgcode.cpp
prusaslicer/patches/patch-tests_fff__print_test__printobject.cpp
prusaslicer/patches/patch-tests_fff__print_test__retraction.cpp
prusaslicer/patches/patch-tests_fff__print_test__seam__aligned.cpp
prusaslicer/patches/patch-tests_fff__print_test__seam__geometry.cpp
prusaslicer/patches/patch-tests_fff__print_test__seam__perimeters.cpp
prusaslicer/patches/patch-tests_fff__print_test__seam__random.cpp
prusaslicer/patches/patch-tests_fff__print_test__seam__rear.cpp
prusaslicer/patches/patch-tests_fff__print_test__seam__scarf.cpp
prusaslicer/patches/patch-tests_fff__print_test__seam__shells.cpp
prusaslicer/patches/patch-tests_fff__print_test__shells.cpp
prusaslicer/patches/patch-tests_fff__print_test__skirt__brim.cpp
prusaslicer/patches/patch-tests_fff__print_test__support__material.cpp
prusaslicer/patches/patch-tests_fff__print_test__thin__walls.cpp
prusaslicer/patches/patch-tests_fff__print_test__trianglemesh.cpp
prusaslicer/patches/patch-tests_libslic3r_test__3mf.cpp
prusaslicer/patches/patch-tests_libslic3r_test__aabbindirect.cpp
prusaslicer/patches/patch-tests_libslic3r_test__anyptr.cpp
prusaslicer/patches/patch-tests_libslic3r_test__arachne.cpp
prusaslicer/patches/patch-tests_libslic3r_test__arc__welder.cpp
prusaslicer/patches/patch-tests_libslic3r_test__astar.cpp
prusaslicer/patches/patch-tests_libslic3r_test__clipper__offset.cpp
prusaslicer/patches/patch-tests_libslic3r_test__clipper__utils.cpp
prusaslicer/patches/patch-tests_libslic3r_test__color.cpp
prusaslicer/patches/patch-tests_libslic3r_test__config.cpp
prusaslicer/patches/patch-tests_libslic3r_test__curve__fitting.cpp
prusaslicer/patches/patch-tests_libslic3r_test__cut__surface.cpp
prusaslicer/patches/patch-tests_libslic3r_test__elephant__foot__compensation.cpp
prusaslicer/patches/patch-tests_libslic3r_test__expolygon.cpp
prusaslicer/patches/patch-tests_libslic3r_test__geometry.cpp
prusaslicer/patches/patch-tests_libslic3r_test__hollowing.cpp
prusaslicer/patches/patch-tests_libslic3r_test__indexed__triangle__set.cpp
prusaslicer/patches/patch-tests_libslic3r_test__jump__point__search.cpp
prusaslicer/patches/patch-tests_libslic3r_test__kdtreeindirect.cpp
prusaslicer/patches/patch-tests_libslic3r_test__layer__region.cpp
prusaslicer/patches/patch-tests_libslic3r_test__line.cpp
prusaslicer/patches/patch-tests_libslic3r_test__marchingsquares.cpp
prusaslicer/patches/patch-tests_libslic3r_test__meshboolean.cpp
prusaslicer/patches/patch-tests_libslic3r_test__multiple__beds.cpp
prusaslicer/patches/patch-tests_libslic3r_test__mutable__polygon.cpp
prusaslicer/patches/patch-tests_libslic3r_test__mutable__priority__queue.cpp
prusaslicer/patches/patch-tests_libslic3r_test__optimizers.cpp
prusaslicer/patches/patch-tests_libslic3r_test__placeholder__parser.cpp
prusaslicer/patches/patch-tests_libslic3r_test__png__io.cpp
prusaslicer/patches/patch-tests_libslic3r_test__point.cpp
prusaslicer/patches/patch-tests_libslic3r_test__polygon.cpp
prusaslicer/patches/patch-tests_libslic3r_test__polyline.cpp
prusaslicer/patches/patch-tests_libslic3r_test__quadric__edge__collapse.cpp
prusaslicer/patches/patch-tests_libslic3r_test__region__expansion.cpp
prusaslicer/patches/patch-tests_libslic3r_test__static__map.cpp
prusaslicer/patches/patch-tests_libslic3r_test__stl.cpp
prusaslicer/patches/patch-tests_libslic3r_test__support__spots__generator.cpp
prusaslicer/patches/patch-tests_libslic3r_test__surface__mesh.cpp
prusaslicer/patches/patch-tests_libslic3r_test__timeutils.cpp
prusaslicer/patches/patch-tests_libslic3r_test__triangulation.cpp
prusaslicer/patches/patch-tests_libslic3r_test__utils.cpp
prusaslicer/patches/patch-tests_libslic3r_test__voronoi.cpp
prusaslicer/patches/patch-tests_sla__print_sla__archive__readwrite__tests.cpp
prusaslicer/patches/patch-tests_sla__print_sla__print__tests.cpp
prusaslicer/patches/patch-tests_sla__print_sla__raycast__tests.cpp
prusaslicer/patches/patch-tests_sla__print_sla__supptgen__tests.cpp
prusaslicer/patches/patch-tests_sla__print_sla__supptreeutils__tests.cpp
prusaslicer/patches/patch-tests_sla__print_sla__test__utils.cpp
prusaslicer/patches/patch-tests_sla__print_sla__test__utils.hpp
prusaslicer/patches/patch-tests_sla__print_sla__zcorrection__tests.cpp
prusaslicer/patches/patch-tests_slic3rutils_secretstore__tests.cpp
prusaslicer/patches/patch-tests_slic3rutils_slic3r__arrangejob__tests.cpp
prusaslicer/patches/patch-tests_slic3rutils_slic3r__jobs__tests.cpp
prusaslicer/patches/patch-tests_slic3rutils_slic3r__version__tests.cpp
prusaslicer/patches/patch-tests_thumbnails_test__thumbnails__ini__string.cpp
prusaslicer/patches/patch-tests_thumbnails_test__thumbnails__input__string.cpp
Log Message:
prusaslicer: Update to 2.9.1
PrusaSlicer 2.9.1
Functionally equivalent to 2.9.1-rc2.
PrusaSlicer 2.9.1-rc2
Changes with respect to 2.9.1-rc1
- Test of sequential printability reported names of the colliding objects
incorrectly in certain cases (the test itself was correct). #14238
- Fixed freezing of the new SLA support points generator in certain cases.
- In very rare cases, the new SLA support points generator was crashing. These
cases are now detected and an error message is shown instead.
PrusaSlicer 2.9.1-rc1
Changes with respect to 2.9.1-beta1
- Linux Flatpak build uses a different runtime version to hopefully mitigate
issues with some dedicated GPU cards. #13945
Localization
- Updated CS, PL, DE, IT, ES, FR, JA dictionaries.
PrusaSlicer 2.9.1-beta1
This is the first beta release of PrusaSlicer 2.9.1. This release introduces
new algorithm for generation of SLA support point and couple of bugfixes.
New SLA support point generator
We are introducing a brand new SLA support spot generator, which replaces the
existing solution and provides more precise and predictable support placement.
The new algorithm better differentiates the areas requiring support - small,
medium, and large islands, as well as overhangs - and adapts the support
strategy accordingly.
- Small islands are supported by a single point placed at their center of mass.
- Medium islands use the Voronoi diagram to optimally place two or more
supports.
- Large islands are divided into thin and thick sections, where supports are
placed either along the central axis or around the perimeter for greater
stability.
For detected overhangs, the algorithm dynamically adjusts the support density
based on Z height and overhang angle, minimizing unnecessary supports and
ensuring even distribution.
The new algorithm is not randomized and it produces same results when given
the same input repeatedly. In general, it is a great improvement over the old
algorithm, which often failed in a spectacular manner even in seemingly very
simple cases:
Additional changes make it easier to manage supports and enhance visual
feedback:
- Support density can now be adjusted with a single slider - moving it
instantly updates the preview, enabling smooth and quick fine-tuning.
- A new toggle for displaying the support structure allows users to hide or
show the entire support construction for better model visibility.
- Manually added points are no longer ignored - when the user presses
Automatic Support Generation, the algorithm considers them and adjusts the
surrounding support density accordingly.
- Support types are color-coded, distinguishing islands, manual edits, and
overhang supports.
Bugs fixed with respect to 2.9.1-alpha1
- CLI options export_sla and export_gcode were reintroduced after they were
erroneously removed in 2.9.1-alpha1.
- When sending multiple beds to Connect, PrusaSlicer allowed characters in the
filenames that Connect would refuse. This is now fixed and the names are
refused immediately.
- Remove an extra 1.5s pause after toolchange on an XL printer. This pause has
a meaning for MK4, but including it for the XL makes no sense and could lead
to issues. #13987
- Fixed Compare presets dialog, which did not correctly filter presets when the
user changed selection.
- The new option to propagate thumbnails from 3MF to the G-code when using CLI
was rescaling the images incorrectly and they ended up stretched. Images are
now cropped to prevent this from happening.
- Scarf seams are now suppressed on the first layer to prevent adhesion
problems. #11621 (comment)
- Fix couple of links to the web manual pages.
- Disable scarf seams on thick bridges. This is beneficial for print quality
and it could also cause scraping the print bed if such bridge was on the
second layer. #14190
- Added sequential arrange data for HT90.
- Fix crash during interlocking calculation in specific cases. #14163
- SLA: Fixed object placement on the bed after using auto-orientation. It
stayed partially under the bed.
Translations
- Updated POT
- Updated CS, PL, DE, IT, ES, FR, JA dictionaries
PrusaSlicer 2.9.1-alpha1
Arrange for sequential printing
We are introducing a completely new algorithm to detect collisions during
sequential printing. But not only that by far. We have actually made a new
arrange algorithm that automatically positions and orders objects in such a way
that collisions are avoided. Using sequential printing thus becomes safer and
very easy to setup.
Just to give some context, PrusaSlicer allows sequential printing of objects
(Print Settings -> Output options -> Complete individual objects) for very long
time. This approach has both pros (less travels and stringing, smaller cost of
a print fail) and cons (possibly longer print time because of cooling-related
slowdown). However, printing objects sequentially also means that the print
head has to travel downward after an object is finished, which opens a
possibility of a collision with another object printed previously.
Until now, it was up to the user to decide whether current positioning and
ordering of objects will lead to such a collision or not. While PrusaSlicer had
a very crude check for collisions and while it showed outline of the extruder
clearance area in the scene, it was quite misleading and giving extreme amount
of false positive detections, rendering it hardly usable.
These times are now gone:
In addition, 3D model of the extruder is rendered when browsing through the
Preview using the horizontal slider (as seen above). This is to help the user
asses the situation. When a collision is detected, an error message is shown
informing the user about which object was crashed into. The error does not
block export of the G-code.
As of now, the feature is only provided for Prusa printers (except MK2 and
HT90, the latter of which will be added before 2.9.1 final), because it
requires detailed information about the extruder geometry. Printers by other
manufacturers may be added later, if we are provided with the necessary data by
the community. The exact format of the data may still change at this point (in
general they are reasonably simple sets of extruder slices in heights where
they change significantly plus the model for visualization). Testing and
collecting feedback on the function as a whole is a priority at this point.
When PrusaSlicer does not have this extra information, it falls back to a very
simple generic model based on extruder_clearance_radius and
extruder_clearance_height config options. These options are in slicer for years
and were used for the crude sequential printing check, we decided to keep them
for this single purpose. The values were moved from Print Settings to Printer
Settings, as they describe the physical geometry of the printer. The "fallback"
model used for the algorithm is seen on the picture below, printing MK4 parts
on an Ender:
Note that the horizontal slider has two modes - it can either browse through
the whole print, or just the top layer. For assessing sequential printability,
the first mode is probably more useful. The switch was in Preferences, but we
have now also duplicated in it the slider settings menu in the bottom right
corner, so it is readily accessible:
The algorithm heavily relies on z3 solver. Thanks to Microsoft for developing
the library and releasing its source code publicly.
Related to #1052, #1095, #1662, #6474, #7787, #8948, #10216, #10709, #11834,
Multi-material interlocking #11588
Printing with multiple materials is often challenging regarding proper
connection between adjacent parts. Especially some materials do not bind well
together, meaning that the boundaries form weak spots in the resulting print.
The same problem (to a lesser degree) affects prints with multiple extruders of
the same material. To alleviate these issues, PrusaSlicer now has an option of
interlocking the neighboring parts together:
The option can be turned on in Print Settings -> Multiple Extruders ->
Advanced, where one also finds a couple of related parameters.
The feature was originally developed in Ultimaker Cura and it was later ported
into OrcaSlicer. The implementation in PrusaSlicer was ported from there, with
only minor modifications. We would like to express our gratitude to everyone
involved in the development of this feature.
Configuration options to simplify printing with different materials
While PrusaSlicer in fact supports many scenarios in multitool/multimaterial
printing, it was never very user friendly to set everything up in the user
interface. In 2.9.0-beta1, we introduces an additional config option to help
setup printing with multiple nozzle diameters. In this release, we are adding a
similar tool to help with bed temperatures. The bed temperature is defined in
Filament Settings, and it is not intuitive to see what happens if two filaments
with different bed temperature in the config are used.
There is a new option in Print Settings -> Multiple Extruders -> Extruders ->
Bed temperature by extruder, which specifies the extruder to take bed
temperature from. Setting it to zero (which is the default) uses the simple
logic that the first layer temperature is always taken from the first printing
extruder, and the same applies to the second layer (which has a separate
temperature settings).
A slicing warning informing the user about using differing bed temperatures now
contains a hint to use this new parameter.
Other improvements with respect to 2.9.0
- Added a new configuration parameter for speed for printing solid infill above
bridges (Print Settings -> Speed -> Over bridges) so it is possible to slow
this difficult-to-print infill without slowing down the entire print.
- Add a new configuration parameter for speed of solid infill on the first
layer (Print Settings -> Speed -> First layer solid infill speed).
- When sending multiple beds at once into Connect, the upload file dialog no
longer allows to select a filename. Only the "bulk" naming dialog is shown
after a printer is selected. This means that individual filename defaults
retain correct print statistics (estimated times etc), instead of being
overwritten by the filename for the first bed. #14078
- There are three buttons in SLA Material Settings - Material printing profile
which set the values of all the tilt-related fields to predefined values
corresponding to the legacy Fast, Slow and High viscosity profiles.
Bugs fixed with respect to 2.9.0
- Fixed incorrect visualization of travels in Preview when custom z-offset was
used.
- Fixed uncommanded move to a random location in rare cases (caused by an
uninitialized variable), possibly leading into digging the nozzle into the
bed. #13826, #14079
- Fixed incorrect size of exported thumbnails when slicing using CLI (since
2.9.0, the thumbnail from the 3MF propagates to the G-code).
- Fixed rendering of bed numbers in Preview so they never render on the
toolpaths. Also, the bed numbers newly show when viewed from under the bed.
#13814
- Make wipe tower position and rotation accessible in placeholder parser again.
#13684
- Fixed update of "state icons" in the Preview thumbnails when using Object
Manipulation panel.
To see a diff of this commit:
https://wip.pkgsrc.org/cgi-bin/gitweb.cgi?p=pkgsrc-wip.git;a=commitdiff;h=dba8aa82f257ca48366680f4dd4088475ef33d0e
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
diffstat:
prusaslicer/Makefile | 3 +-
prusaslicer/PLIST | 29 +++++
prusaslicer/distinfo | 115 ++---------------
.../patches/patch-src_libseqarrange_CMakeLists.txt | 15 +++
...patch-src_slic3r-arrange-wrapper_CMakeLists.txt | 16 ---
.../patch-src_slic3r-arrange_CMakeLists.txt | 16 ---
.../patches/patch-src_slic3r_GUI_InstanceCheck.cpp | 10 +-
.../patch-src_slic3r_GUI_PhysicalPrinterDialog.cpp | 16 ---
.../patches/patch-src_slic3r_GUI_Plater.cpp | 15 +--
...tch-src_slic3r_GUI_UserAccountCommunication.cpp | 14 +--
prusaslicer/patches/patch-tests_CMakeLists.txt | 22 +---
.../patches/patch-tests_arrange_test__arrange.cpp | 43 -------
...ch-tests_arrange_test__arrange__integration.cpp | 52 --------
prusaslicer/patches/patch-tests_catch__main.hpp | 61 ---------
.../patch-tests_fff__print_benchmark__seams.cpp | 15 ---
...ff__print_test__avoid__crossing__perimeters.cpp | 13 --
.../patch-tests_fff__print_test__bridges.cpp | 13 --
...patch-tests_fff__print_test__cancel__object.cpp | 22 ----
.../patch-tests_fff__print_test__clipper.cpp | 13 --
.../patch-tests_fff__print_test__cooling.cpp | 13 --
.../patch-tests_fff__print_test__custom__gcode.cpp | 13 --
.../patches/patch-tests_fff__print_test__data.cpp | 16 ---
...ch-tests_fff__print_test__extrusion__entity.cpp | 102 ---------------
.../patches/patch-tests_fff__print_test__fill.cpp | 32 -----
.../patches/patch-tests_fff__print_test__flow.cpp | 94 --------------
.../patches/patch-tests_fff__print_test__gaps.cpp | 13 --
.../patches/patch-tests_fff__print_test__gcode.cpp | 34 -----
...patch-tests_fff__print_test__gcode__travels.cpp | 29 -----
...tch-tests_fff__print_test__gcodefindreplace.cpp | 13 --
.../patch-tests_fff__print_test__gcodewriter.cpp | 49 --------
.../patch-tests_fff__print_test__layers.cpp | 35 ------
.../patches/patch-tests_fff__print_test__model.cpp | 13 --
.../patches/patch-tests_fff__print_test__multi.cpp | 13 --
.../patch-tests_fff__print_test__perimeters.cpp | 22 ----
.../patches/patch-tests_fff__print_test__print.cpp | 13 --
.../patch-tests_fff__print_test__printgcode.cpp | 58 ---------
.../patch-tests_fff__print_test__printobject.cpp | 67 ----------
.../patch-tests_fff__print_test__retraction.cpp | 30 -----
.../patch-tests_fff__print_test__seam__aligned.cpp | 59 ---------
...patch-tests_fff__print_test__seam__geometry.cpp | 43 -------
...tch-tests_fff__print_test__seam__perimeters.cpp | 36 ------
.../patch-tests_fff__print_test__seam__random.cpp | 13 --
.../patch-tests_fff__print_test__seam__rear.cpp | 13 --
.../patch-tests_fff__print_test__seam__scarf.cpp | 20 ---
.../patch-tests_fff__print_test__seam__shells.cpp | 22 ----
.../patch-tests_fff__print_test__shells.cpp | 13 --
.../patch-tests_fff__print_test__skirt__brim.cpp | 68 ----------
...ch-tests_fff__print_test__support__material.cpp | 13 --
.../patch-tests_fff__print_test__thin__walls.cpp | 13 --
.../patch-tests_fff__print_test__trianglemesh.cpp | 13 --
.../patches/patch-tests_libslic3r_test__3mf.cpp | 13 --
.../patch-tests_libslic3r_test__aabbindirect.cpp | 98 ---------------
.../patches/patch-tests_libslic3r_test__anyptr.cpp | 13 --
.../patch-tests_libslic3r_test__arachne.cpp | 13 --
.../patch-tests_libslic3r_test__arc__welder.cpp | 22 ----
.../patches/patch-tests_libslic3r_test__astar.cpp | 33 -----
...patch-tests_libslic3r_test__clipper__offset.cpp | 113 -----------------
.../patch-tests_libslic3r_test__clipper__utils.cpp | 139 ---------------------
.../patches/patch-tests_libslic3r_test__color.cpp | 13 --
.../patches/patch-tests_libslic3r_test__config.cpp | 14 ---
.../patch-tests_libslic3r_test__curve__fitting.cpp | 56 ---------
.../patch-tests_libslic3r_test__cut__surface.cpp | 20 ---
...ibslic3r_test__elephant__foot__compensation.cpp | 13 --
.../patches/patch-tests_libslic3r_test__emboss.cpp | 29 +----
.../patch-tests_libslic3r_test__expolygon.cpp | 38 ------
.../patch-tests_libslic3r_test__geometry.cpp | 13 --
.../patch-tests_libslic3r_test__hollowing.cpp | 15 ---
...ests_libslic3r_test__indexed__triangle__set.cpp | 16 ---
...h-tests_libslic3r_test__jump__point__search.cpp | 13 --
.../patch-tests_libslic3r_test__kdtreeindirect.cpp | 13 --
.../patch-tests_libslic3r_test__layer__region.cpp | 22 ----
.../patches/patch-tests_libslic3r_test__line.cpp | 26 ----
...patch-tests_libslic3r_test__marchingsquares.cpp | 13 --
.../patch-tests_libslic3r_test__meshboolean.cpp | 31 -----
.../patch-tests_libslic3r_test__multiple__beds.cpp | 13 --
...atch-tests_libslic3r_test__mutable__polygon.cpp | 13 --
...ts_libslic3r_test__mutable__priority__queue.cpp | 17 ---
.../patch-tests_libslic3r_test__optimizers.cpp | 13 --
...h-tests_libslic3r_test__placeholder__parser.cpp | 83 ------------
.../patch-tests_libslic3r_test__png__io.cpp | 16 ---
.../patches/patch-tests_libslic3r_test__point.cpp | 24 ----
.../patch-tests_libslic3r_test__polygon.cpp | 13 --
.../patch-tests_libslic3r_test__polyline.cpp | 16 ---
...sts_libslic3r_test__quadric__edge__collapse.cpp | 13 --
...tch-tests_libslic3r_test__region__expansion.cpp | 63 ----------
.../patch-tests_libslic3r_test__static__map.cpp | 13 --
.../patches/patch-tests_libslic3r_test__stl.cpp | 13 --
...s_libslic3r_test__support__spots__generator.cpp | 22 ----
.../patch-tests_libslic3r_test__surface__mesh.cpp | 21 ----
.../patch-tests_libslic3r_test__timeutils.cpp | 13 --
.../patch-tests_libslic3r_test__triangulation.cpp | 13 --
.../patches/patch-tests_libslic3r_test__utils.cpp | 13 --
.../patch-tests_libslic3r_test__voronoi.cpp | 41 ------
...s_sla__print_sla__archive__readwrite__tests.cpp | 13 --
.../patch-tests_sla__print_sla__print__tests.cpp | 34 -----
.../patch-tests_sla__print_sla__raycast__tests.cpp | 65 ----------
...patch-tests_sla__print_sla__supptgen__tests.cpp | 13 --
...-tests_sla__print_sla__supptreeutils__tests.cpp | 72 -----------
.../patch-tests_sla__print_sla__test__utils.cpp | 63 ----------
.../patch-tests_sla__print_sla__test__utils.hpp | 18 ---
...ch-tests_sla__print_sla__zcorrection__tests.cpp | 34 -----
.../patch-tests_slic3rutils_secretstore__tests.cpp | 12 --
...tests_slic3rutils_slic3r__arrangejob__tests.cpp | 53 --------
...patch-tests_slic3rutils_slic3r__jobs__tests.cpp | 14 ---
...ch-tests_slic3rutils_slic3r__version__tests.cpp | 13 --
...ts_thumbnails_test__thumbnails__ini__string.cpp | 13 --
..._thumbnails_test__thumbnails__input__string.cpp | 20 ---
107 files changed, 72 insertions(+), 3075 deletions(-)
diffs:
diff --git a/prusaslicer/Makefile b/prusaslicer/Makefile
index e2782553c1..df633957bd 100644
--- a/prusaslicer/Makefile
+++ b/prusaslicer/Makefile
@@ -1,6 +1,6 @@
# $NetBSD$
-PKGVERSION= 2.9.0
+PKGVERSION= 2.9.1
PKGNAME= prusaslicer-${PKGVERSION}
DISTNAME= PrusaSlicer-${PKGVERSION:C/(alpha|beta|rc)/-\1/}
CATEGORIES= cad
@@ -66,6 +66,7 @@ pre-configure:
.include "../../math/imath/buildlink3.mk"
.include "../../math/mpfr/buildlink3.mk"
.include "../../math/qhull/buildlink3.mk"
+.include "../../math/z3/buildlink3.mk"
.include "../../net/libsoup/buildlink3.mk"
.include "../../parallel/threadingbuildingblocks/buildlink3.mk"
.include "../../security/heimdal/buildlink3.mk"
diff --git a/prusaslicer/PLIST b/prusaslicer/PLIST
index e9b2eb0ff6..6ef3978348 100644
--- a/prusaslicer/PLIST
+++ b/prusaslicer/PLIST
@@ -5,6 +5,15 @@ bin/prusa-slicer
lib/udev/rules.d/90-3dconnexion.rules
share/PrusaSlicer/data/embossed_text.obj
share/PrusaSlicer/data/hints.ini
+share/PrusaSlicer/data/printer_gantries/geometries.json
+share/PrusaSlicer/data/printer_gantries/prusa3d_coreone_gantry.stl
+share/PrusaSlicer/data/printer_gantries/prusa3d_ht90_actuator.stl
+share/PrusaSlicer/data/printer_gantries/prusa3d_mini_gantry.stl
+share/PrusaSlicer/data/printer_gantries/prusa3d_mk3s_gantry.stl
+share/PrusaSlicer/data/printer_gantries/prusa3d_mk4_gantry.stl
+share/PrusaSlicer/data/printer_gantries/prusa3d_mk4s_gantry.stl
+share/PrusaSlicer/data/printer_gantries/prusa3d_xl_gantry.stl
+share/PrusaSlicer/data/sla_support.svg
share/PrusaSlicer/fonts/NotoSans-Regular.ttf
share/PrusaSlicer/fonts/NotoSansCJK-Regular.ttc
share/PrusaSlicer/fonts/README.txt
@@ -276,6 +285,11 @@ share/PrusaSlicer/icons/sla_view_original.svg
share/PrusaSlicer/icons/sla_view_processed.svg
share/PrusaSlicer/icons/slice_all.svg
share/PrusaSlicer/icons/snap.svg
+share/PrusaSlicer/icons/sphere_blueish.svg
+share/PrusaSlicer/icons/sphere_cyan.svg
+share/PrusaSlicer/icons/sphere_lightgray.svg
+share/PrusaSlicer/icons/sphere_orange.svg
+share/PrusaSlicer/icons/sphere_redish.svg
share/PrusaSlicer/icons/spin_dec.svg
share/PrusaSlicer/icons/spin_dec_act.svg
share/PrusaSlicer/icons/spin_inc.svg
@@ -291,6 +305,8 @@ share/PrusaSlicer/icons/stl.icns
share/PrusaSlicer/icons/support.svg
share/PrusaSlicer/icons/support_blocker.svg
share/PrusaSlicer/icons/support_enforcer.svg
+share/PrusaSlicer/icons/support_structure.svg
+share/PrusaSlicer/icons/support_structure_invisible.svg
share/PrusaSlicer/icons/svg_modifier.svg
share/PrusaSlicer/icons/svg_negative.svg
share/PrusaSlicer/icons/svg_part.svg
@@ -579,6 +595,8 @@ share/PrusaSlicer/profiles/Creality/sermoond1.svg
share/PrusaSlicer/profiles/Creality/sermoond1_bed.stl
share/PrusaSlicer/profiles/Creality/sermoonv1.svg
share/PrusaSlicer/profiles/Creality/sermoonv1_bed.stl
+share/PrusaSlicer/profiles/E2D.idx
+share/PrusaSlicer/profiles/E2D.ini
share/PrusaSlicer/profiles/Elegoo.idx
share/PrusaSlicer/profiles/Elegoo.ini
share/PrusaSlicer/profiles/Elegoo/NEPTUNE1_thumbnail.png
@@ -719,6 +737,7 @@ share/PrusaSlicer/profiles/Print4Taste/MC2.0_texture.svg
share/PrusaSlicer/profiles/Print4Taste/MC2.0_thumbnail.png
share/PrusaSlicer/profiles/PrusaResearch.idx
share/PrusaSlicer/profiles/PrusaResearch.ini
+share/PrusaSlicer/profiles/PrusaResearch/COREONE_thumbnail.png
share/PrusaSlicer/profiles/PrusaResearch/MINIIS_ALPHA_thumbnail.png
share/PrusaSlicer/profiles/PrusaResearch/MINIIS_BETA_thumbnail.png
share/PrusaSlicer/profiles/PrusaResearch/MINIIS_thumbnail.png
@@ -758,6 +777,8 @@ share/PrusaSlicer/profiles/PrusaResearch/XLIS_alpha_thumbnail.png
share/PrusaSlicer/profiles/PrusaResearch/XLIS_beta_thumbnail.png
share/PrusaSlicer/profiles/PrusaResearch/XLIS_thumbnail.png
share/PrusaSlicer/profiles/PrusaResearch/XL_thumbnail.png
+share/PrusaSlicer/profiles/PrusaResearch/coreone.svg
+share/PrusaSlicer/profiles/PrusaResearch/coreone_bed.stl
share/PrusaSlicer/profiles/PrusaResearch/mini.svg
share/PrusaSlicer/profiles/PrusaResearch/miniIS.svg
share/PrusaSlicer/profiles/PrusaResearch/miniISbeta.svg
@@ -785,6 +806,8 @@ share/PrusaSlicer/profiles/PrusaResearchSLA/sl1.svg
share/PrusaSlicer/profiles/PrusaResearchSLA/sl1_bed.stl
share/PrusaSlicer/profiles/PrusaResearchSLA/sl1s.svg
share/PrusaSlicer/profiles/PrusaResearchSLA/sl1s_bed.stl
+share/PrusaSlicer/profiles/QIDITechnology.idx
+share/PrusaSlicer/profiles/QIDITechnology.ini
share/PrusaSlicer/profiles/RatRig.idx
share/PrusaSlicer/profiles/RatRig.ini
share/PrusaSlicer/profiles/RatRig/VC3_300_thumbnail.png
@@ -975,6 +998,8 @@ share/PrusaSlicer/shaders/110/mm_gouraud.fs
share/PrusaSlicer/shaders/110/mm_gouraud.vs
share/PrusaSlicer/shaders/110/printbed.fs
share/PrusaSlicer/shaders/110/printbed.vs
+share/PrusaSlicer/shaders/110/tool_marker.fs
+share/PrusaSlicer/shaders/110/tool_marker.vs
share/PrusaSlicer/shaders/110/toolpaths_cog.fs
share/PrusaSlicer/shaders/110/toolpaths_cog.vs
share/PrusaSlicer/shaders/110/variable_layer_height.fs
@@ -1006,6 +1031,8 @@ share/PrusaSlicer/shaders/140/mm_gouraud.fs
share/PrusaSlicer/shaders/140/mm_gouraud.vs
share/PrusaSlicer/shaders/140/printbed.fs
share/PrusaSlicer/shaders/140/printbed.vs
+share/PrusaSlicer/shaders/140/tool_marker.fs
+share/PrusaSlicer/shaders/140/tool_marker.vs
share/PrusaSlicer/shaders/140/toolpaths_cog.fs
share/PrusaSlicer/shaders/140/toolpaths_cog.vs
share/PrusaSlicer/shaders/140/variable_layer_height.fs
@@ -1036,6 +1063,8 @@ share/PrusaSlicer/shaders/ES/mm_gouraud.fs
share/PrusaSlicer/shaders/ES/mm_gouraud.vs
share/PrusaSlicer/shaders/ES/printbed.fs
share/PrusaSlicer/shaders/ES/printbed.vs
+share/PrusaSlicer/shaders/ES/tool_marker.fs
+share/PrusaSlicer/shaders/ES/tool_marker.vs
share/PrusaSlicer/shaders/ES/toolpaths_cog.fs
share/PrusaSlicer/shaders/ES/toolpaths_cog.vs
share/PrusaSlicer/shaders/ES/variable_layer_height.fs
diff --git a/prusaslicer/distinfo b/prusaslicer/distinfo
index f10ea352ef..3f6c1d8140 100644
--- a/prusaslicer/distinfo
+++ b/prusaslicer/distinfo
@@ -1,8 +1,8 @@
$NetBSD$
-BLAKE2s (PrusaSlicer-2.9.0.tar.gz) = f3aece9c36b69327f5d241e14505c90a6125507e9a0882f445b5f6269931188c
-SHA512 (PrusaSlicer-2.9.0.tar.gz) = 554099ba827f8b4af37727d4e99ad6b2f339c530f35a4f8e63f0c5aaf455a5fc3261b983939c487f76964c522ea8ecd13527efea7f881749f907a039cfe7ef89
-Size (PrusaSlicer-2.9.0.tar.gz) = 70604482 bytes
+BLAKE2s (PrusaSlicer-2.9.1.tar.gz) = ce0ff211f54bb85080da34b077afa10717b608d7e504949a76eb8f2b27de5cfa
+SHA512 (PrusaSlicer-2.9.1.tar.gz) = a7a7131fa0d04bbf63954e047c8db18fffd71e35650841d281b5f97ec23b8029324a187320a5b5f5abdc7da2ec44c2a757e4a67db22e17bbcc069756e59959d9
+Size (PrusaSlicer-2.9.1.tar.gz) = 76767199 bytes
SHA1 (patch-CMakeLists.txt) = 293c5116b1ec1c4fa733bf18f6e9ab8c19f7bad4
SHA1 (patch-bundled__deps_CMakeLists.txt) = 9fad4b02132498a6bf06e0e53ed7626fa8b60b67
SHA1 (patch-bundled__deps_avrdude_avrdude_arduino.c) = c03d11e4648054fc8e5028da3838400d61c27a95
@@ -10,6 +10,7 @@ SHA1 (patch-bundled__deps_avrdude_avrdude_libavrdude.h) = a0d56b68dba55d58202352
SHA1 (patch-bundled__deps_localesutils_LocalesUtils.cpp) = 18cbf76d545828bc97bb765b470f2aa4ef5e8a8e
SHA1 (patch-bundled__deps_localesutils_LocalesUtils.hpp) = 9c6228e2db7bf4aedb29dec656c1995305afd8a2
SHA1 (patch-cmake_modules_FindOpenVDB.cmake) = 4f2afc423a70fe60617b33ff7f26859b39775faa
+SHA1 (patch-src_libseqarrange_CMakeLists.txt) = ece7856a15a6e24c5a918ced85d7379558e89d47
SHA1 (patch-src_libslic3r_CutSurface.cpp) = a6a702e0fe32bc9b37136299e14c715f62943ab7
SHA1 (patch-src_libslic3r_GCodeSender.cpp) = bd69c52e92ff85dba7f357eab62788a8e67a440e
SHA1 (patch-src_libslic3r_Platform.cpp) = 3066585efc98ba4963e41bda5952df38a7b095a0
@@ -18,8 +19,6 @@ SHA1 (patch-src_libslic3r_SupportSpotsGenerator.cpp) = b1080470f18e873ad7b39a5e5
SHA1 (patch-src_libslic3r_Thread.cpp) = 8aa488b933baa97132058f88a82eef8db73ab2f5
SHA1 (patch-src_libslic3r_Utils_DirectoriesUtils.cpp) = 02c874c348016d572ddf8fed3171aabe2d4550c0
SHA1 (patch-src_occt__wrapper_CMakeLists.txt) = d1d3405bd68e32d204eaf95a578f4f837571f391
-SHA1 (patch-src_slic3r-arrange-wrapper_CMakeLists.txt) = 0535e0d83b159cbef97c6119fcc6f55b682e9ba8
-SHA1 (patch-src_slic3r-arrange_CMakeLists.txt) = bbc7a54ff5ff037712e4a82814bf3d45cc355953
SHA1 (patch-src_slic3r_CMakeLists.txt) = f6ad2741c3eb3c28550cedf5a07799866944b247
SHA1 (patch-src_slic3r_GUI_BitmapCache.cpp) = 9a464bcb09589e12de70ce57cda17f526df33b9b
SHA1 (patch-src_slic3r_GUI_ConfigWizard.cpp) = a8bd1d621f73ae6464b1ba4a5cb1db965e8e551b
@@ -37,15 +36,14 @@ SHA1 (patch-src_slic3r_GUI_GUI__ObjectLayers.cpp) = da99be89d62efffceaccc81ade8e
SHA1 (patch-src_slic3r_GUI_GUI__Utils.cpp) = bcbc83109ba7806e6371d0ef10f3c05cc480d730
SHA1 (patch-src_slic3r_GUI_Gizmos_GLGizmoMeasure.cpp) = 2d70ef92abf3c0c8110ca321b6f7ff880f59ed53
SHA1 (patch-src_slic3r_GUI_ImGuiPureWrap.cpp) = 3c0a1d8b7b3d8eb0ee593495544752920912d29a
-SHA1 (patch-src_slic3r_GUI_InstanceCheck.cpp) = c9ae1ec2db2b493578cc128383fa4cf0b3e2ae6a
+SHA1 (patch-src_slic3r_GUI_InstanceCheck.cpp) = f3035a97568f283de0edc3cdf500316ec9bf9cbc
SHA1 (patch-src_slic3r_GUI_InstanceCheck.hpp) = 2af0741f480c41d5cc5bd9d3e55480c8e6ab029c
SHA1 (patch-src_slic3r_GUI_KBShortcutsDialog.cpp) = 82a395a10e9d0a1b049863d8d30bce2ed99cb5f2
SHA1 (patch-src_slic3r_GUI_Mouse3DController.cpp) = bf8bf60e17e304a2022b9a80852d7ab38fc2451d
SHA1 (patch-src_slic3r_GUI_Mouse3DController.hpp) = 6a008114e932b08951428b6fa882b41acaa85c0b
SHA1 (patch-src_slic3r_GUI_OpenGLManager.cpp) = 53d116ee715dd3c90bad11c55659c538f49007ea
SHA1 (patch-src_slic3r_GUI_OptionsGroup.cpp) = c413f24a9a50069b93bdd611b95fa85ccab45567
-SHA1 (patch-src_slic3r_GUI_PhysicalPrinterDialog.cpp) = 5dbe3c5c19ce5d03b5dd310af484b712b091efda
-SHA1 (patch-src_slic3r_GUI_Plater.cpp) = 298b3c9fed809d9a316e663bb4428adafa31b0dc
+SHA1 (patch-src_slic3r_GUI_Plater.cpp) = 58fa06c429c8698f96dbbd1bcd1d655088a05d4b
SHA1 (patch-src_slic3r_GUI_Preferences.cpp) = 37459f9fa37751e0b72ba8538eb44c286a5174d4
SHA1 (patch-src_slic3r_GUI_PresetComboBoxes.cpp) = ae083491bb2b1228c0f666fdc36b1b3ca4008c3c
SHA1 (patch-src_slic3r_GUI_PresetComboBoxes.hpp) = 0c84c1b706a1f4e00f60c1677c7edf53845d4467
@@ -56,7 +54,7 @@ SHA1 (patch-src_slic3r_GUI_TopBar.cpp) = 89025abe1622ae57a84429c65ae1402a503e1ad
SHA1 (patch-src_slic3r_GUI_UnsavedChangesDialog.cpp) = 1594eb7521f23c42700b0fbed7c039b62e9d4029
SHA1 (patch-src_slic3r_GUI_UnsavedChangesDialog.hpp) = 0bd01147f0b654d190534959708fbf346cbb364e
SHA1 (patch-src_slic3r_GUI_UpdateDialogs.cpp) = 7fdcc609e66c619c110db2da18b24ddfd0ffe2a2
-SHA1 (patch-src_slic3r_GUI_UserAccountCommunication.cpp) = 31750eeb0bdc50ebd954b8112e24b4a2c3d65c4f
+SHA1 (patch-src_slic3r_GUI_UserAccountCommunication.cpp) = 1467c25ad13aae19bf6e1cdeb3c60c12d0d17071
SHA1 (patch-src_slic3r_GUI_WipeTowerDialog.cpp) = fc6fd1bfee7001c268bf50209bcfd1cb96f6a9ad
SHA1 (patch-src_slic3r_GUI_wxExtensions.cpp) = d6e807f3dd1f18fa9c703798067fa1e808112891
SHA1 (patch-src_slic3r_GUI_wxExtensions.hpp) = 356da6dbd7ca7f60fa8a73c51533a1c1ad1530c1
@@ -64,100 +62,5 @@ SHA1 (patch-src_slic3r_Utils_FontConfigHelp.hpp) = 807c71e904bb5b5c882bc6a72161a
SHA1 (patch-src_slic3r_Utils_Serial.cpp) = 77dbb4e3526e932c04b8020b6f808278d1319bdb
SHA1 (patch-src_slic3r_Utils_WifiScanner.cpp) = a7c8d6dfb43ddaca651df13b487b43dd51b32719
SHA1 (patch-src_slic3r_Utils_WxFontUtils.cpp) = 75d657b3c8af52eee7aa130a895760c4203fef78
-SHA1 (patch-tests_CMakeLists.txt) = 89670b4a0a74f9cf985b4b3f0e7aa3f83d8b8a36
-SHA1 (patch-tests_arrange_test__arrange.cpp) = 4861d58845a0285b59d2d75869e35121f1293d8d
-SHA1 (patch-tests_arrange_test__arrange__integration.cpp) = 90d16d1d8b815fc47d3076e7e06fe8ac0b89feb5
-SHA1 (patch-tests_catch__main.hpp) = cbcf811b2ac9d95c4a16e34068fa64a771f6527d
-SHA1 (patch-tests_fff__print_benchmark__seams.cpp) = 946182bb449f35142decaa23bf470d553550da05
-SHA1 (patch-tests_fff__print_test__avoid__crossing__perimeters.cpp) = 7ecee4420340190017bea14e51f9f20e9a9d40ec
-SHA1 (patch-tests_fff__print_test__bridges.cpp) = 9ed9cfdb94800fdef8b70aeae90ed43f3378cd1a
-SHA1 (patch-tests_fff__print_test__cancel__object.cpp) = 257e072468b7f12806d669f41aa617605d202d5e
-SHA1 (patch-tests_fff__print_test__clipper.cpp) = 47456223cbc4a5a5794a5de398fb6605a7ee8015
-SHA1 (patch-tests_fff__print_test__cooling.cpp) = 4b899035319adcec50c2222fe7bd2c785c550d05
-SHA1 (patch-tests_fff__print_test__custom__gcode.cpp) = d6aaf70b53a1547faff1134d5e88c7b0318aea39
-SHA1 (patch-tests_fff__print_test__data.cpp) = b1203f9e7e3571233370536e72a2c61a233852d2
-SHA1 (patch-tests_fff__print_test__extrusion__entity.cpp) = 4a6f77474bd1575a3ee32ebae3eb1f67d937207f
-SHA1 (patch-tests_fff__print_test__fill.cpp) = 81ad1633c84fb236ef2585108af2dd63f31ac850
-SHA1 (patch-tests_fff__print_test__flow.cpp) = 9ed579f2f11b8c633fd80ebe51a5e4986cdab757
-SHA1 (patch-tests_fff__print_test__gaps.cpp) = 166e0cf758eb72f2d5f80ab8cbf084afd586163e
-SHA1 (patch-tests_fff__print_test__gcode.cpp) = 7ef4648a3f7928e86d91a79568d39677a395ee80
-SHA1 (patch-tests_fff__print_test__gcode__travels.cpp) = 3af188fc7625b7bdc47e3436abc8d2e31afb92de
-SHA1 (patch-tests_fff__print_test__gcodefindreplace.cpp) = 1dcc0187fef0527f111996fa83dcfdbb9ad21ab9
-SHA1 (patch-tests_fff__print_test__gcodewriter.cpp) = 48d3caf9e158ff1c0499be1d0d23121f4b53ebd1
-SHA1 (patch-tests_fff__print_test__layers.cpp) = a110baa86741ac1d660760272be54eb61931453f
-SHA1 (patch-tests_fff__print_test__model.cpp) = 327cc6ebb5a91cea1f79d596740f8b59c79b7d89
-SHA1 (patch-tests_fff__print_test__multi.cpp) = da0c20fedbabca4b83733f5cf1696e726051ee45
-SHA1 (patch-tests_fff__print_test__perimeters.cpp) = e6b455cbffea28bbe93d1bd83b23a5214cf442d4
-SHA1 (patch-tests_fff__print_test__print.cpp) = 70d12a80f17506eb302ae690316fb4950e7b50cd
-SHA1 (patch-tests_fff__print_test__printgcode.cpp) = 26f51fc96dfa04ba9db7a7cf22a84b71e48e359f
-SHA1 (patch-tests_fff__print_test__printobject.cpp) = c66c3cf170de6a83c9c51d6648b662f3a256c694
-SHA1 (patch-tests_fff__print_test__retraction.cpp) = 9d680474692d291bd9aaff7ed6a96aae2dc663df
-SHA1 (patch-tests_fff__print_test__seam__aligned.cpp) = d299dc2f493ce57a51aa00395321828d91241cd8
-SHA1 (patch-tests_fff__print_test__seam__geometry.cpp) = 396c183e0f2d711baf4ccb8a2652368df21fc58f
-SHA1 (patch-tests_fff__print_test__seam__perimeters.cpp) = d87f71a5a62be5832bbdf4ff436326530be7df39
-SHA1 (patch-tests_fff__print_test__seam__random.cpp) = 2b73d3ed62bc5a60d18e7e60f7e9e05cc38e9f86
-SHA1 (patch-tests_fff__print_test__seam__rear.cpp) = 88ffce562371d823ea45e68486ed822f24d13fa7
-SHA1 (patch-tests_fff__print_test__seam__scarf.cpp) = c98c81c4f964fb775bc729ef5db72abece664618
-SHA1 (patch-tests_fff__print_test__seam__shells.cpp) = 32aa8dafd0e8512e314e093592d7f8c91bdb4202
-SHA1 (patch-tests_fff__print_test__shells.cpp) = c96072233c9f35a798971b9fd220ccbb423d82c3
-SHA1 (patch-tests_fff__print_test__skirt__brim.cpp) = 5bdddb6929c85a5c53da5b9a1f96fdb975955eee
-SHA1 (patch-tests_fff__print_test__support__material.cpp) = 2c0b98b3f885b058fc15f11699c48dea0632bb3a
-SHA1 (patch-tests_fff__print_test__thin__walls.cpp) = 5d7a126ca4ae7bd2d3bcfec21ae8114258d35f0f
-SHA1 (patch-tests_fff__print_test__trianglemesh.cpp) = d3a4800afb6d9c237385775dce5a244d72237920
-SHA1 (patch-tests_libslic3r_test__3mf.cpp) = a2200bd6dfc4024634350aa6e986caee44cea376
-SHA1 (patch-tests_libslic3r_test__aabbindirect.cpp) = 85524ec599031d073a44d49bad4e39e7ba5934f1
-SHA1 (patch-tests_libslic3r_test__anyptr.cpp) = 0cdcc5ae139aa0ec0d1cadbe2785b8c4279ecc10
-SHA1 (patch-tests_libslic3r_test__arachne.cpp) = d40888298291756d161b553e1e49cc095e961f4b
-SHA1 (patch-tests_libslic3r_test__arc__welder.cpp) = ada362d80154f25daa1a355a80ac0d46cf9ec314
-SHA1 (patch-tests_libslic3r_test__astar.cpp) = 6841f6c717469772f1fd37ad3e749f40401e1dfa
-SHA1 (patch-tests_libslic3r_test__clipper__offset.cpp) = 8a0250b77cf9577d21639fdc40f01add11988ae5
-SHA1 (patch-tests_libslic3r_test__clipper__utils.cpp) = df03001635d24f34f51ab4d01091b73db066ba33
-SHA1 (patch-tests_libslic3r_test__color.cpp) = 53ef8ce1f1a25b7a08c17759cfc78538a0fdbb24
-SHA1 (patch-tests_libslic3r_test__config.cpp) = 87545bb2dd53e05a9b8fb09b4a4c1af193e754da
-SHA1 (patch-tests_libslic3r_test__curve__fitting.cpp) = 3d905c88deac5dc6696a5c98ece0707270df50e2
-SHA1 (patch-tests_libslic3r_test__cut__surface.cpp) = 48e106514f7e458e97f7ddff73be53203a72e3b4
-SHA1 (patch-tests_libslic3r_test__elephant__foot__compensation.cpp) = fb5fa38edec00d560fbfdedf48695757815ff970
-SHA1 (patch-tests_libslic3r_test__emboss.cpp) = 54f902c1c16f39fcdc2cf55edfa0a4fb97533611
-SHA1 (patch-tests_libslic3r_test__expolygon.cpp) = 9d5ce4d2619a24751f22b178fd1985876734d1f1
-SHA1 (patch-tests_libslic3r_test__geometry.cpp) = a3b8f9f0384cf0fe01f3dd92e8b52a477d38ec4d
-SHA1 (patch-tests_libslic3r_test__hollowing.cpp) = 21b3f2decbdf170bfa841fa6698f8398faae35a9
-SHA1 (patch-tests_libslic3r_test__indexed__triangle__set.cpp) = 613a11b74b0f99e9191c76a9494ad783f994bce8
-SHA1 (patch-tests_libslic3r_test__jump__point__search.cpp) = 31d5c690e300c420ca75e52f6f65e25ccfd3b7e2
-SHA1 (patch-tests_libslic3r_test__kdtreeindirect.cpp) = 6163ec75ca824e44840c2e9f2a196dc9f869712b
-SHA1 (patch-tests_libslic3r_test__layer__region.cpp) = 23b035e18e8ecb46664986068d31b9ae113e76c3
-SHA1 (patch-tests_libslic3r_test__line.cpp) = d540e905a1cc42bd05ecdac0690e462740564786
-SHA1 (patch-tests_libslic3r_test__marchingsquares.cpp) = 701f11ff7e66e1f9d74e6424e33a01b75d923ee4
-SHA1 (patch-tests_libslic3r_test__meshboolean.cpp) = 31a6e9bf3a3fc3dc74e8587187af9c2b67eec550
-SHA1 (patch-tests_libslic3r_test__multiple__beds.cpp) = e39639b34360f3494cc8400cb4fa2d855089aec4
-SHA1 (patch-tests_libslic3r_test__mutable__polygon.cpp) = 520d8d53df9da5a16b6b8f9f33b1915b4ca7a75f
-SHA1 (patch-tests_libslic3r_test__mutable__priority__queue.cpp) = 2cba211ebb7a23623a61f868d6643ec52ddfafd2
-SHA1 (patch-tests_libslic3r_test__optimizers.cpp) = 53a5373798aef3fbe4b710b4ff9d818505b4931d
-SHA1 (patch-tests_libslic3r_test__placeholder__parser.cpp) = 5f30b562f1a69f5e3ee22de9eadb98b53a752946
-SHA1 (patch-tests_libslic3r_test__png__io.cpp) = 0ad327a63ef606c0d41af6cf60e8517743ff4ee4
-SHA1 (patch-tests_libslic3r_test__point.cpp) = 4b72e7ccf65f7b5f146cfe0007d219c89750b59a
-SHA1 (patch-tests_libslic3r_test__polygon.cpp) = 2c8a7bf99b08eeeb5296d40a34a92e2e66dc5274
-SHA1 (patch-tests_libslic3r_test__polyline.cpp) = caf306c874cc71f2e93ba59113ae080028b4b06f
-SHA1 (patch-tests_libslic3r_test__quadric__edge__collapse.cpp) = f1b3252d2f3f66024c372560a9b904d26e466514
-SHA1 (patch-tests_libslic3r_test__region__expansion.cpp) = 053c8ae2ec557275960273d3c3c8147c71dc450b
-SHA1 (patch-tests_libslic3r_test__static__map.cpp) = d6f84ff708642c31ddd838671b18fb673f2d0a91
-SHA1 (patch-tests_libslic3r_test__stl.cpp) = accbe373f5a33dcdb34276e0013ef7a2e359eabe
-SHA1 (patch-tests_libslic3r_test__support__spots__generator.cpp) = c929b9f869b0a9000cf03e027a89f951f14f8768
-SHA1 (patch-tests_libslic3r_test__surface__mesh.cpp) = 25112b64fbab6a6cf4654af79f04360169a689cf
-SHA1 (patch-tests_libslic3r_test__timeutils.cpp) = c75d00e97b5413e531a2b509ef4d43682f0ce5fc
-SHA1 (patch-tests_libslic3r_test__triangulation.cpp) = 84a81713f93dfe5f4401a8fe89d9ac6daa53b4e4
-SHA1 (patch-tests_libslic3r_test__utils.cpp) = 48c0600c0c903aa04080a6653d1831bdef54d26a
-SHA1 (patch-tests_libslic3r_test__voronoi.cpp) = 8c26bedf846b1a10f5ba414395feceb3bfd9203c
-SHA1 (patch-tests_sla__print_sla__archive__readwrite__tests.cpp) = 064eefb0d093af63c8a91eb92fe12a0264ae8c46
-SHA1 (patch-tests_sla__print_sla__print__tests.cpp) = fe5a6a602901069088af73da7b5f63d40329f522
-SHA1 (patch-tests_sla__print_sla__raycast__tests.cpp) = 2a78f94de919695e72df0636ea937e89fec2a5d4
-SHA1 (patch-tests_sla__print_sla__supptgen__tests.cpp) = 4128d2edba4b7683b1976d4f121e5cce6a2271f9
-SHA1 (patch-tests_sla__print_sla__supptreeutils__tests.cpp) = 683f98679a50d5146fe7173c10291a76bca81c32
-SHA1 (patch-tests_sla__print_sla__test__utils.cpp) = 16b7c0ba877a7f8be2171b7b99b18bdf3f847d12
-SHA1 (patch-tests_sla__print_sla__test__utils.hpp) = f04aeb14ad5966cf9d091512cfbb7caf9448092b
-SHA1 (patch-tests_sla__print_sla__zcorrection__tests.cpp) = 609b2198fbaa76d86ac8e07effd99cbe78862170
-SHA1 (patch-tests_slic3rutils_secretstore__tests.cpp) = ec391b317dc0514ec32b9a68f3bffd886ffcfcdf
-SHA1 (patch-tests_slic3rutils_slic3r__arrangejob__tests.cpp) = 3cd6288e6ceeafde1885600d475f63b041b4ed45
-SHA1 (patch-tests_slic3rutils_slic3r__jobs__tests.cpp) = bba4e4256b6bfdbb011d51bb542acc60c8f705e3
-SHA1 (patch-tests_slic3rutils_slic3r__version__tests.cpp) = 4ac34b33f56f3cd56c4905b05eff0198c3bb0b72
-SHA1 (patch-tests_thumbnails_test__thumbnails__ini__string.cpp) = 110e0b85bc583f90626eafae9f5e7f57e4d287f5
-SHA1 (patch-tests_thumbnails_test__thumbnails__input__string.cpp) = ea069808217c1bff1863b540d6ab66714f41c41b
+SHA1 (patch-tests_CMakeLists.txt) = 654e13b89f1c3575dcd4f9ff0e3cf2fb353c3944
+SHA1 (patch-tests_libslic3r_test__emboss.cpp) = fef38a4f927f6e4b2620b85a336eb8e2df8b2db1
diff --git a/prusaslicer/patches/patch-src_libseqarrange_CMakeLists.txt b/prusaslicer/patches/patch-src_libseqarrange_CMakeLists.txt
new file mode 100644
index 0000000000..0036df53a7
--- /dev/null
+++ b/prusaslicer/patches/patch-src_libseqarrange_CMakeLists.txt
@@ -0,0 +1,15 @@
+$NetBSD$
+
+Allow Catch2 v3.7 rather than requiring v3.8.
+
+--- src/libseqarrange/CMakeLists.txt.orig 2025-03-12 04:09:58.055557278 +0000
++++ src/libseqarrange/CMakeLists.txt
+@@ -16,7 +16,7 @@ target_link_libraries(sequential_decimat
+
+
+ if (SLIC3R_BUILD_TESTS)
+- find_package(Catch2 3.8 REQUIRED)
++ find_package(Catch2 3.7 REQUIRED)
+
+ add_executable(libseqarrange_tests test/prusaparts.cpp test/seq_test_polygon.cpp test/seq_test_sequential.cpp test/seq_test_preprocess.cpp test/seq_test_interface.cpp)
+ target_include_directories(libseqarrange_tests PRIVATE src )
diff --git a/prusaslicer/patches/patch-src_slic3r-arrange-wrapper_CMakeLists.txt b/prusaslicer/patches/patch-src_slic3r-arrange-wrapper_CMakeLists.txt
deleted file mode 100644
index 45ae11bb50..0000000000
--- a/prusaslicer/patches/patch-src_slic3r-arrange-wrapper_CMakeLists.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-$NetBSD$
-
-Explicity flag library as static to match the rest of PrusaSlicer.
-https://github.com/prusa3d/PrusaSlicer/pull/13896
-
---- src/slic3r-arrange-wrapper/CMakeLists.txt.orig 2025-02-17 22:29:52.581803538 +0000
-+++ src/slic3r-arrange-wrapper/CMakeLists.txt
-@@ -1,7 +1,7 @@
- project(slic3r-arrange-wrapper)
- cmake_minimum_required(VERSION 3.13)
-
--add_library(slic3r-arrange-wrapper
-+add_library(slic3r-arrange-wrapper STATIC
- include/arrange-wrapper/Arrange.hpp
- include/arrange-wrapper/ArrangeSettingsDb_AppCfg.hpp
- include/arrange-wrapper/ArrangeSettingsView.hpp
diff --git a/prusaslicer/patches/patch-src_slic3r-arrange_CMakeLists.txt b/prusaslicer/patches/patch-src_slic3r-arrange_CMakeLists.txt
deleted file mode 100644
index 3f7a1397c1..0000000000
--- a/prusaslicer/patches/patch-src_slic3r-arrange_CMakeLists.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-$NetBSD$
-
-Explicity flag library as static to match the rest of PrusaSlicer.
-https://github.com/prusa3d/PrusaSlicer/pull/13896
-
---- src/slic3r-arrange/CMakeLists.txt.orig 2025-02-17 22:29:38.267707593 +0000
-+++ src/slic3r-arrange/CMakeLists.txt
-@@ -1,7 +1,7 @@
- project(slic3r-arrange)
- cmake_minimum_required(VERSION 3.13)
-
--add_library(slic3r-arrange
-+add_library(slic3r-arrange STATIC
- include/arrange/Beds.hpp
- include/arrange/ArrangeItemTraits.hpp
- include/arrange/PackingContext.hpp
diff --git a/prusaslicer/patches/patch-src_slic3r_GUI_InstanceCheck.cpp b/prusaslicer/patches/patch-src_slic3r_GUI_InstanceCheck.cpp
index a79d0b7c65..cfc405f166 100644
--- a/prusaslicer/patches/patch-src_slic3r_GUI_InstanceCheck.cpp
+++ b/prusaslicer/patches/patch-src_slic3r_GUI_InstanceCheck.cpp
@@ -2,9 +2,9 @@ $NetBSD$
Treat NetBSD like Linux.
---- src/slic3r/GUI/InstanceCheck.cpp.orig 2021-01-11 13:01:51.000000000 +0000
+--- src/slic3r/GUI/InstanceCheck.cpp.orig 2025-03-10 13:20:54.000000000 +0000
+++ src/slic3r/GUI/InstanceCheck.cpp
-@@ -23,7 +23,7 @@
+@@ -31,7 +31,7 @@
#include <strsafe.h>
#endif //WIN32
@@ -13,16 +13,16 @@ Treat NetBSD like Linux.
#include <dbus/dbus.h> /* Pull in all of D-Bus headers. */
#endif //__linux__
-@@ -169,7 +169,7 @@ namespace instance_check_internal
+@@ -316,7 +316,7 @@ namespace instance_check_internal
return false;
}
-#elif defined(__linux__)
+#elif defined(__linux__) || defined(__NetBSD__)
- static bool send_message(const std::string &message_text, const std::string &version)
+ static void list_matching_objects(const std::string& pattern, std::vector<std::string>& result)
{
-@@ -257,7 +257,7 @@ bool instance_check(int argc, char** arg
+@@ -561,7 +561,7 @@ bool instance_check(int argc, char** arg
hashed_path = std::hash<std::string>{}(boost::filesystem::system_complete(argv[0]).string());
#else
boost::system::error_code ec;
diff --git a/prusaslicer/patches/patch-src_slic3r_GUI_PhysicalPrinterDialog.cpp b/prusaslicer/patches/patch-src_slic3r_GUI_PhysicalPrinterDialog.cpp
deleted file mode 100644
index bd8c3eb3bb..0000000000
--- a/prusaslicer/patches/patch-src_slic3r_GUI_PhysicalPrinterDialog.cpp
+++ /dev/null
@@ -1,16 +0,0 @@
-$NetBSD$
-
-Fix ambiguous overload errors with wxWidgets 3.2.4
-http://github.com/prusa3d/PrusaSlicer/issues/11768
-
---- src/slic3r/GUI/PhysicalPrinterDialog.cpp.orig 2024-01-07 03:26:15.232175668 +0000
-+++ src/slic3r/GUI/PhysicalPrinterDialog.cpp
-@@ -467,7 +467,7 @@ void PhysicalPrinterDialog::build_printh
- // Always fill in the "printhost_port" combo box from the config and select it.
- {
- Choice* choice = dynamic_cast<Choice*>(m_optgroup->get_field("printhost_port"));
-- choice->set_values({ m_config->opt_string("printhost_port") });
-+ choice->set_values(std::vector<std::string>({ m_config->opt_string("printhost_port") }));
- choice->set_selection();
- }
-
diff --git a/prusaslicer/patches/patch-src_slic3r_GUI_Plater.cpp b/prusaslicer/patches/patch-src_slic3r_GUI_Plater.cpp
index 3fff4fe53f..71d1363acb 100644
--- a/prusaslicer/patches/patch-src_slic3r_GUI_Plater.cpp
+++ b/prusaslicer/patches/patch-src_slic3r_GUI_Plater.cpp
@@ -5,9 +5,9 @@ Treat NetBSD like Linux.
Fix ambiguous overload errors with wxWidgets 3.2.4
http://github.com/prusa3d/PrusaSlicer/issues/11768
---- src/slic3r/GUI/Plater.cpp.orig 2024-12-20 11:54:34.000000000 +0000
+--- src/slic3r/GUI/Plater.cpp.orig 2025-03-10 13:20:54.000000000 +0000
+++ src/slic3r/GUI/Plater.cpp
-@@ -1228,7 +1228,7 @@ std::vector<size_t> Plater::priv::load_f
+@@ -1271,7 +1271,7 @@ std::vector<size_t> Plater::priv::load_f
// when loading a project file. However, creating the dialog on heap causes issues on macOS, where it does not
// appear at all. Therefore, we create the dialog on stack on Win and macOS, and on heap on Linux, which
// is the only system that needed the workarounds in the first place.
@@ -16,7 +16,7 @@ http://github.com/prusa3d/PrusaSlicer/issues/11768
auto progress_dlg = new wxProgressDialog(loading, "", 100, find_toplevel_parent(q), wxPD_APP_MODAL | wxPD_AUTO_HIDE);
Slic3r::ScopeGuard([&progress_dlg](){ if (progress_dlg) progress_dlg->Destroy(); progress_dlg = nullptr; });
#else
-@@ -3552,7 +3552,7 @@ void Plater::priv::on_right_click(RBtnEv
+@@ -3559,7 +3559,7 @@ void Plater::priv::on_right_click(RBtnEv
Vec2d mouse_position = evt.data.first;
wxPoint position(static_cast<int>(mouse_position.x()),
static_cast<int>(mouse_position.y()));
@@ -25,12 +25,3 @@ http://github.com/prusa3d/PrusaSlicer/issues/11768
// For some reason on Linux the menu isn't displayed if position is
// specified (even though the position is sane).
position = wxDefaultPosition;
-@@ -4420,7 +4420,7 @@ void Plater::load_project(const wxString
- s_multiple_beds.set_loading_project_flag(true);
- ScopeGuard guard([](){ s_multiple_beds.set_loading_project_flag(false);});
-
-- if (! load_files({ into_path(filename) }).empty()) {
-+ if (! load_files(std::vector<boost::filesystem::path>({ into_path(filename) })).empty()) {
- // At least one file was loaded.
- p->set_project_filename(filename);
- // Save the names of active presets and project specific config into ProjectDirtyStateManager.
diff --git a/prusaslicer/patches/patch-src_slic3r_GUI_UserAccountCommunication.cpp b/prusaslicer/patches/patch-src_slic3r_GUI_UserAccountCommunication.cpp
index f94f3b85f4..751d9c87cb 100644
--- a/prusaslicer/patches/patch-src_slic3r_GUI_UserAccountCommunication.cpp
+++ b/prusaslicer/patches/patch-src_slic3r_GUI_UserAccountCommunication.cpp
@@ -2,19 +2,9 @@ $NetBSD$
Treat NetBSD like linux.
-Add missing includes.
-
---- src/slic3r/GUI/UserAccountCommunication.cpp.orig 2024-06-26 15:21:47.000000000 +0000
+--- src/slic3r/GUI/UserAccountCommunication.cpp.orig 2025-03-10 13:20:54.000000000 +0000
+++ src/slic3r/GUI/UserAccountCommunication.cpp
-@@ -11,6 +11,7 @@
- #include <boost/beast/core/detail/base64.hpp>
- #include <boost/algorithm/string.hpp>
- #include <boost/filesystem.hpp>
-+#include <boost/nowide/convert.hpp>
- #include <boost/nowide/cstdio.hpp>
- #include <boost/nowide/fstream.hpp>
- #include <curl/curl.h>
-@@ -37,7 +38,7 @@
+@@ -38,7 +38,7 @@
#include <CommonCrypto/CommonDigest.h>
#endif
diff --git a/prusaslicer/patches/patch-tests_CMakeLists.txt b/prusaslicer/patches/patch-tests_CMakeLists.txt
index 560edadce8..d14600dbba 100644
--- a/prusaslicer/patches/patch-tests_CMakeLists.txt
+++ b/prusaslicer/patches/patch-tests_CMakeLists.txt
@@ -1,25 +1,15 @@
$NetBSD$
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
+Allow Catch2 v3.7 rather than requiring v3.8.
---- tests/CMakeLists.txt.orig 2024-02-29 13:03:32.000000000 +0000
+--- tests/CMakeLists.txt.orig 2025-03-12 04:10:14.579829737 +0000
+++ tests/CMakeLists.txt
@@ -1,7 +1,7 @@
# TODO Add individual tests as executables in separate directories
# add_subirectory(<testcase>)
--find_package(Catch2 2.9 REQUIRED)
-+find_package(Catch2 REQUIRED)
+-find_package(Catch2 3.8 REQUIRED)
++find_package(Catch2 3.7 REQUIRED)
+ slic3r_remap_configs(Catch2::Catch2 RelWithDebInfo Release)
+ slic3r_remap_configs(Catch2::Catch2WithMain RelWithDebInfo Release)
- include(Catch)
-
-@@ -13,7 +13,7 @@ set(CATCH_EXTRA_ARGS "" CACHE STRING "Ex
- add_library(test_common INTERFACE)
- target_include_directories(test_common INTERFACE ${CMAKE_CURRENT_LIST_DIR})
- target_compile_definitions(test_common INTERFACE TEST_DATA_DIR=R"\(${TEST_DATA_DIR}\)" CATCH_CONFIG_FAST_COMPILE)
--target_link_libraries(test_common INTERFACE Catch2::Catch2)
-+target_link_libraries(test_common INTERFACE Catch2::Catch2WithMain)
-
- if (APPLE)
- target_link_libraries(test_common INTERFACE "-liconv -framework IOKit" "-framework CoreFoundation" -lc++)
diff --git a/prusaslicer/patches/patch-tests_arrange_test__arrange.cpp b/prusaslicer/patches/patch-tests_arrange_test__arrange.cpp
deleted file mode 100644
index bf529a3389..0000000000
--- a/prusaslicer/patches/patch-tests_arrange_test__arrange.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/arrange/test_arrange.cpp.orig 2024-06-14 21:54:48.000000000 +0000
-+++ tests/arrange/test_arrange.cpp
-@@ -1,4 +1,7 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_template_test_macros.hpp>
-+#include <catch2/catch_test_macros.hpp>
-+#include <catch2/matchers/catch_matchers.hpp>
-+#include <catch2/matchers/catch_matchers_floating_point.hpp>
- #include "test_utils.hpp"
-
- #include <libslic3r/Execution/ExecutionSeq.hpp>
-@@ -40,6 +43,9 @@
-
- #include <random>
-
-+using Catch::Matchers::WithinRel;
-+using Catch::Matchers::WithinAbs;
-+
- template<class ArrItem = Slic3r::arr2::ArrangeItem>
- static std::vector<ArrItem> prusa_parts(double infl = 0.) {
- using namespace Slic3r;
-@@ -930,7 +936,7 @@ TEST_CASE("Optimal nfp position search w
-
- Slic3r::Vec2crd D = bed.center - item.shape.center();
- REQUIRE(item.translation == D);
-- REQUIRE(score == Approx(0.).margin(EPSILON));
-+ REQUIRE_THAT(score, WithinAbs(0., EPSILON));
- }
- }
- }
-@@ -1063,6 +1069,6 @@ TEMPLATE_TEST_CASE("Test if allowed item
- bool packed = pack(strategy, bed, itm);
-
- REQUIRE(packed);
-- REQUIRE(get_rotation(itm) == Approx(PI));
-+ REQUIRE_THAT(get_rotation(itm), WithinRel(PI));
- }
-
diff --git a/prusaslicer/patches/patch-tests_arrange_test__arrange__integration.cpp b/prusaslicer/patches/patch-tests_arrange_test__arrange__integration.cpp
deleted file mode 100644
index b789b48993..0000000000
--- a/prusaslicer/patches/patch-tests_arrange_test__arrange__integration.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/arrange/test_arrange_integration.cpp.orig 2024-12-20 11:54:34.000000000 +0000
-+++ tests/arrange/test_arrange_integration.cpp
-@@ -1,4 +1,10 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_template_test_macros.hpp>
-+#include <catch2/catch_test_macros.hpp>
-+#include <catch2/generators/catch_generators.hpp>
-+#include <catch2/generators/catch_generators_adapters.hpp>
-+#include <catch2/generators/catch_generators_range.hpp>
-+#include <catch2/matchers/catch_matchers.hpp>
-+#include <catch2/matchers/catch_matchers_floating_point.hpp>
- #include "test_utils.hpp"
-
- #include <arrange-wrapper/Arrange.hpp>
-@@ -11,6 +17,8 @@
- #include "libslic3r/Geometry/ConvexHull.hpp"
- #include "libslic3r/Format/3mf.hpp"
-
-+using Catch::Matchers::WithinRel;
-+
- static Slic3r::Model get_example_model_with_20mm_cube()
- {
- using namespace Slic3r;
-@@ -559,10 +567,10 @@ TEST_CASE("Virtual bed handlers - Stride
- auto ref_pos = tr * Vec3d::Zero();
-
- auto displace = bed_index * (unscaled(vbh.stride_scaled()));
-- REQUIRE(ref_pos.x() == Approx(-displace));
-+ REQUIRE_THAT(ref_pos.x(), WithinRel(-displace));
-
- auto ref_pos_mi = mi_to_move.get_matrix() * Vec3d::Zero();
-- REQUIRE(ref_pos_mi.x() == Approx(instance_displace.x() + (bed_index >= 0) * displace));
-+ REQUIRE_THAT(ref_pos_mi.x(), WithinRel(instance_displace.x() + (bed_index >= 0) * displace));
- }
- }
- }
-@@ -871,8 +879,8 @@ bool settings_eq(const Slic3r::arr2::Arr
- {
- return v1.is_rotation_enabled() == v2.is_rotation_enabled() &&
- v1.get_arrange_strategy() == v2.get_arrange_strategy() &&
-- v1.get_distance_from_bed() == Approx(v2.get_distance_from_bed()) &&
-- v1.get_distance_from_objects() == Approx(v2.get_distance_from_objects()) &&
-+ WithinRel(v2.get_distance_from_bed()).match(v1.get_distance_from_bed()) &&
-+ WithinRel(v2.get_distance_from_objects()).match(v1.get_distance_from_objects()) &&
- v1.get_geometry_handling() == v2.get_geometry_handling() &&
- v1.get_xl_alignment() == v2.get_xl_alignment();
- ;
diff --git a/prusaslicer/patches/patch-tests_catch__main.hpp b/prusaslicer/patches/patch-tests_catch__main.hpp
deleted file mode 100644
index fb4b3367bc..0000000000
--- a/prusaslicer/patches/patch-tests_catch__main.hpp
+++ /dev/null
@@ -1,61 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/catch_main.hpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/catch_main.hpp
-@@ -3,52 +3,6 @@
-
- #define CATCH_CONFIG_EXTERNAL_INTERFACES
- #define CATCH_CONFIG_MAIN
--// #define CATCH_CONFIG_DEFAULT_REPORTER "verboseconsole"
--#include <catch2/catch.hpp>
--
--namespace Catch {
--struct VerboseConsoleReporter : public ConsoleReporter {
-- double duration = 0.;
-- using ConsoleReporter::ConsoleReporter;
--
-- void testCaseStarting(TestCaseInfo const& _testInfo) override
-- {
-- Colour::use(Colour::Cyan);
-- stream << "Testing ";
-- Colour::use(Colour::None);
-- stream << _testInfo.name << std::endl;
-- ConsoleReporter::testCaseStarting(_testInfo);
-- }
--
-- void sectionStarting(const SectionInfo &_sectionInfo) override
-- {
-- if (_sectionInfo.name != currentTestCaseInfo->name)
-- stream << _sectionInfo.name << std::endl;
--
-- ConsoleReporter::sectionStarting(_sectionInfo);
-- }
--
-- void sectionEnded(const SectionStats &_sectionStats) override {
-- duration += _sectionStats.durationInSeconds;
-- ConsoleReporter::sectionEnded(_sectionStats);
-- }
--
-- void testCaseEnded(TestCaseStats const& stats) override
-- {
-- if (stats.totals.assertions.allOk()) {
-- Colour::use(Colour::BrightGreen);
-- stream << "Passed";
-- Colour::use(Colour::None);
-- stream << " in " << duration << " [seconds]\n" << std::endl;
-- }
--
-- duration = 0.;
-- ConsoleReporter::testCaseEnded(stats);
-- }
--};
--
--CATCH_REGISTER_REPORTER( "verboseconsole", VerboseConsoleReporter )
--
--} // namespace Catch
-+#include <catch2/catch_test_macros.hpp>
-
- #endif // CATCH_MAIN
diff --git a/prusaslicer/patches/patch-tests_fff__print_benchmark__seams.cpp b/prusaslicer/patches/patch-tests_fff__print_benchmark__seams.cpp
deleted file mode 100644
index 36734464e8..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_benchmark__seams.cpp
+++ /dev/null
@@ -1,15 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-
---- tests/fff_print/benchmark_seams.cpp.orig 2024-06-16 00:31:48.747974361 +0000
-+++ tests/fff_print/benchmark_seams.cpp
-@@ -1,4 +1,7 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-+#include <catch2/benchmark/catch_benchmark.hpp>
-+#include <catch2/benchmark/catch_chronometer.hpp>
-+#include <catch2/benchmark/catch_constructor.hpp>
- #include "test_data.hpp"
-
- #include "libslic3r/GCode/SeamGeometry.hpp"
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__avoid__crossing__perimeters.cpp b/prusaslicer/patches/patch-tests_fff__print_test__avoid__crossing__perimeters.cpp
deleted file mode 100644
index 3b96b6356b..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_test__avoid__crossing__perimeters.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/fff_print/test_avoid_crossing_perimeters.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/fff_print/test_avoid_crossing_perimeters.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include "test_data.hpp"
-
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__bridges.cpp b/prusaslicer/patches/patch-tests_fff__print_test__bridges.cpp
deleted file mode 100644
index 6f51591028..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_test__bridges.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/fff_print/test_bridges.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/fff_print/test_bridges.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include <libslic3r/BridgeDetector.hpp>
- #include <libslic3r/Geometry.hpp>
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__cancel__object.cpp b/prusaslicer/patches/patch-tests_fff__print_test__cancel__object.cpp
deleted file mode 100644
index 6667ffa2d6..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_test__cancel__object.cpp
+++ /dev/null
@@ -1,22 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/fff_print/test_cancel_object.cpp.orig 2024-05-19 01:35:07.417821468 +0000
-+++ tests/fff_print/test_cancel_object.cpp
-@@ -1,4 +1,5 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_approx.hpp>
-+#include <catch2/catch_test_macros.hpp>
- #include <sstream>
- #include <fstream>
-
-@@ -7,6 +8,7 @@
-
- using namespace Slic3r;
- using namespace Test;
-+using Catch::Approx;
-
- constexpr bool debug_files{false};
-
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__clipper.cpp b/prusaslicer/patches/patch-tests_fff__print_test__clipper.cpp
deleted file mode 100644
index 2f6e35f0ca..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_test__clipper.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/fff_print/test_clipper.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/fff_print/test_clipper.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include "test_data.hpp"
- #include "libslic3r/ClipperZUtils.hpp"
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__cooling.cpp b/prusaslicer/patches/patch-tests_fff__print_test__cooling.cpp
deleted file mode 100644
index 7289dee0ac..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_test__cooling.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/fff_print/test_cooling.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/fff_print/test_cooling.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include <numeric>
- #include <sstream>
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__custom__gcode.cpp b/prusaslicer/patches/patch-tests_fff__print_test__custom__gcode.cpp
deleted file mode 100644
index 3905f47e48..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_test__custom__gcode.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/fff_print/test_custom_gcode.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/fff_print/test_custom_gcode.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include <exception>
- #include <numeric>
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__data.cpp b/prusaslicer/patches/patch-tests_fff__print_test__data.cpp
deleted file mode 100644
index fe0c7dcf8c..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_test__data.cpp
+++ /dev/null
@@ -1,16 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/fff_print/test_data.cpp.orig 2024-04-09 12:13:15.323843373 +0000
-+++ tests/fff_print/test_data.cpp
-@@ -399,7 +399,7 @@ bool contains_regex(const std::string &d
-
- } } // namespace Slic3r::Test
-
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- SCENARIO("init_print functionality", "[test_data]") {
- GIVEN("A default config") {
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__extrusion__entity.cpp b/prusaslicer/patches/patch-tests_fff__print_test__extrusion__entity.cpp
deleted file mode 100644
index 3985ac6133..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_test__extrusion__entity.cpp
+++ /dev/null
@@ -1,102 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/fff_print/test_extrusion_entity.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/fff_print/test_extrusion_entity.cpp
-@@ -1,4 +1,7 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_approx.hpp>
-+#include <catch2/catch_test_macros.hpp>
-+#include <catch2/matchers/catch_matchers.hpp>
-+#include <catch2/matchers/catch_matchers_floating_point.hpp>
-
- #include <cstdlib>
-
-@@ -11,6 +14,8 @@
- #include "test_data.hpp"
-
- using namespace Slic3r;
-+using Catch::Approx;
-+using Catch::Matchers::WithinRel;
-
- static inline Slic3r::Point random_point(float LO=-50, float HI=50)
- {
-@@ -62,11 +67,11 @@ SCENARIO("ExtrusionLoop", "[ExtrusionEnt
- ExtrusionLoop loop;
- loop.paths.emplace_back(new_extrusion_path(square.split_at_first_point(), ExtrusionRole::ExternalPerimeter, 1.));
- THEN("polygon area") {
-- REQUIRE(loop.polygon().area() == Approx(square.area()));
-- REQUIRE(loop.area() == Approx(square.area()));
-+ REQUIRE_THAT(loop.polygon().area(), WithinRel(square.area()));
-+ REQUIRE_THAT(loop.area(), WithinRel(square.area()));
- }
- THEN("loop length") {
-- REQUIRE(loop.length() == Approx(square.length()));
-+ REQUIRE_THAT(loop.length(), WithinRel(square.length()));
- }
-
- WHEN("cloned") {
-@@ -112,14 +117,14 @@ SCENARIO("ExtrusionLoop", "[ExtrusionEnt
- }
- double tot_len = polyline1.length() + polyline2.length();
- THEN("length") {
-- REQUIRE(loop.length() == Approx(tot_len));
-+ REQUIRE_THAT(loop.length(), WithinRel(tot_len));
- }
-
- WHEN("splitting at intermediate point") {
- auto loop2 = std::unique_ptr<ExtrusionLoop>(dynamic_cast<ExtrusionLoop*>(loop.clone()));
- loop2->split_at_vertex(polyline1.points[1]);
- THEN("length after splitting is unchanged") {
-- REQUIRE(loop2->length() == Approx(tot_len));
-+ REQUIRE_THAT(loop2->length(), WithinRel(tot_len));
- }
- THEN("loop contains three paths after splitting") {
- REQUIRE(loop2->paths.size() == 3);
-@@ -151,7 +156,7 @@ SCENARIO("ExtrusionLoop", "[ExtrusionEnt
- double l2 = 0;
- for (const ExtrusionPath &p : paths)
- l2 += p.length();
-- REQUIRE(l2 == Approx(l - 3.));
-+ REQUIRE_THAT(l2, WithinRel(l - 3.));
- }
- }
-
-@@ -159,7 +164,7 @@ SCENARIO("ExtrusionLoop", "[ExtrusionEnt
- auto loop2 = std::unique_ptr<ExtrusionLoop>(dynamic_cast<ExtrusionLoop*>(loop.clone()));
- loop2->split_at_vertex(polyline2.points.front());
- THEN("length after splitting is unchanged") {
-- REQUIRE(loop2->length() == Approx(tot_len));
-+ REQUIRE_THAT(loop2->length(), WithinRel(tot_len));
- }
- THEN("loop contains two paths after splitting") {
- REQUIRE(loop2->paths.size() == 2);
-@@ -189,7 +194,7 @@ SCENARIO("ExtrusionLoop", "[ExtrusionEnt
- auto loop2 = std::unique_ptr<ExtrusionLoop>(dynamic_cast<ExtrusionLoop*>(loop.clone()));
- loop2->split_at(point, false, 0);
- THEN("length after splitting is unchanged") {
-- REQUIRE(loop2->length() == Approx(tot_len));
-+ REQUIRE_THAT(loop2->length(), WithinRel(tot_len));
- }
- Point expected_start_point(200, 150);
- THEN("expected starting point") {
-@@ -220,7 +225,7 @@ SCENARIO("ExtrusionLoop", "[ExtrusionEnt
- if (! loop.split_at_vertex(point))
- loop.split_at(point, false, 0);
- THEN("total length is preserved after splitting") {
-- REQUIRE(loop.length() == Approx(len));
-+ REQUIRE_THAT(loop.length(), WithinRel(len));
- }
- THEN("order is correctly preserved after splitting") {
- REQUIRE(loop.paths.front().role() == ExtrusionRole::ExternalPerimeter);
-@@ -243,7 +248,7 @@ SCENARIO("ExtrusionLoop", "[ExtrusionEnt
- double len = loop.length();
- THEN("split_at() preserves total length") {
- loop.split_at({ 15896783, 15868739 }, false, 0);
-- REQUIRE(loop.length() == Approx(len));
-+ REQUIRE_THAT(loop.length(), WithinRel(len));
- }
- }
- }
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__fill.cpp b/prusaslicer/patches/patch-tests_fff__print_test__fill.cpp
deleted file mode 100644
index a35901e5d5..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_test__fill.cpp
+++ /dev/null
@@ -1,32 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/fff_print/test_fill.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/fff_print/test_fill.cpp
-@@ -1,4 +1,6 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-+#include <catch2/matchers/catch_matchers.hpp>
-+#include <catch2/matchers/catch_matchers_floating_point.hpp>
-
- #include <numeric>
- #include <sstream>
-@@ -18,6 +20,7 @@
-
- using namespace Slic3r;
- using namespace std::literals;
-+using Catch::Matchers::WithinRel;
-
- bool test_if_solid_surface_filled(const ExPolygon& expolygon, double flow_spacing, double angle = 0, double density = 1.0);
-
-@@ -25,7 +28,7 @@ bool test_if_solid_surface_filled(const
- TEST_CASE("Fill: adjusted solid distance") {
- int surface_width = 250;
- int distance = Slic3r::Flow::solid_spacing(surface_width, 47);
-- REQUIRE(distance == Approx(50));
-+ REQUIRE_THAT(distance, WithinRel(50));
- REQUIRE(surface_width % distance == 0);
- }
- #endif
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__flow.cpp b/prusaslicer/patches/patch-tests_fff__print_test__flow.cpp
deleted file mode 100644
index 098624cb47..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_test__flow.cpp
+++ /dev/null
@@ -1,94 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/fff_print/test_flow.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/fff_print/test_flow.cpp
-@@ -1,4 +1,6 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-+#include <catch2/matchers/catch_matchers.hpp>
-+#include <catch2/matchers/catch_matchers_floating_point.hpp>
-
- #include <numeric>
- #include <sstream>
-@@ -12,6 +14,7 @@
-
- using namespace Slic3r::Test;
- using namespace Slic3r;
-+using Catch::Matchers::WithinRel;
-
- SCENARIO("Extrusion width specifics", "[Flow]") {
-
-@@ -22,7 +25,7 @@ SCENARIO("Extrusion width specifics", "[
- parser.parse_buffer(Slic3r::Test::slice({ Slic3r::Test::TestMesh::cube_20x20x20 }, config),
- [&E_per_mm_bottom, layer_height] (Slic3r::GCodeReader& self, const Slic3r::GCodeReader::GCodeLine& line)
- {
-- if (self.z() == Approx(layer_height).margin(0.01)) { // only consider first layer
-+ if (WithinRel(layer_height, 0.01).match(self.z())) { // only consider first layer
- if (line.extruding(self) && line.dist_XY(self) > 0)
- E_per_mm_bottom.emplace_back(line.dist_E(self) / line.dist_XY(self));
- }
-@@ -30,7 +33,7 @@ SCENARIO("Extrusion width specifics", "[
- THEN("First layer width applies to everything on first layer.") {
- REQUIRE(E_per_mm_bottom.size() > 0);
- const double E_per_mm_avg = std::accumulate(E_per_mm_bottom.cbegin(), E_per_mm_bottom.cend(), 0.0) / static_cast<double>(E_per_mm_bottom.size());
-- bool pass = (std::count_if(E_per_mm_bottom.cbegin(), E_per_mm_bottom.cend(), [E_per_mm_avg] (const double& v) { return v == Approx(E_per_mm_avg); }) == 0);
-+ bool pass = (std::count_if(E_per_mm_bottom.cbegin(), E_per_mm_bottom.cend(), [E_per_mm_avg] (const double& v) { return WithinRel(E_per_mm_avg).match(v); }) == 0);
- REQUIRE(pass);
- }
- THEN("First layer width does not apply to upper layer.") {
-@@ -156,18 +159,18 @@ SCENARIO("Flow: Flow math for non-bridge
- // Spacing for non-bridges is has some overlap
- THEN("External perimeter flow has spacing fixed to 1.125 * nozzle_diameter") {
- auto flow = Flow::new_from_config_width(frExternalPerimeter, ConfigOptionFloatOrPercent(0, false), nozzle_diameter, layer_height);
-- REQUIRE(flow.spacing() == Approx(1.125 * nozzle_diameter - layer_height * (1.0 - PI / 4.0)));
-+ REQUIRE_THAT(flow.spacing(), WithinRel(1.125 * nozzle_diameter - layer_height * (1.0 - PI / 4.0), EPSILON));
- }
-
- THEN("Internal perimeter flow has spacing fixed to 1.125 * nozzle_diameter") {
- auto flow = Flow::new_from_config_width(frPerimeter, ConfigOptionFloatOrPercent(0, false), nozzle_diameter, layer_height);
-- REQUIRE(flow.spacing() == Approx(1.125 *nozzle_diameter - layer_height * (1.0 - PI / 4.0)));
-+ REQUIRE_THAT(flow.spacing(), WithinRel(1.125 *nozzle_diameter - layer_height * (1.0 - PI / 4.0), EPSILON));
- }
- THEN("Spacing for supplied width is 0.8927f") {
- auto flow = Flow::new_from_config_width(frExternalPerimeter, width, nozzle_diameter, layer_height);
-- REQUIRE(flow.spacing() == Approx(width.value - layer_height * (1.0 - PI / 4.0)));
-+ REQUIRE_THAT(flow.spacing(), WithinRel(width.value - layer_height * (1.0 - PI / 4.0), EPSILON));
- flow = Flow::new_from_config_width(frPerimeter, width, nozzle_diameter, layer_height);
-- REQUIRE(flow.spacing() == Approx(width.value - layer_height * (1.0 - PI / 4.0)));
-+ REQUIRE_THAT(flow.spacing(), WithinRel(width.value - layer_height * (1.0 - PI / 4.0), EPSILON));
- }
- }
- /// Check the min/max
-@@ -178,14 +181,14 @@ SCENARIO("Flow: Flow math for non-bridge
- layer_height = 0.15f;
- THEN("Max width is set.") {
- auto flow = Flow::new_from_config_width(frPerimeter, ConfigOptionFloatOrPercent(0, false), nozzle_diameter, layer_height);
-- REQUIRE(flow.width() == Approx(1.125 * nozzle_diameter));
-+ REQUIRE_THAT(flow.width(), WithinRel(1.125 * nozzle_diameter));
- }
- }
- WHEN("Layer height is set to 0.25") {
- layer_height = 0.25f;
- THEN("Min width is set.") {
- auto flow = Flow::new_from_config_width(frPerimeter, ConfigOptionFloatOrPercent(0, false), nozzle_diameter, layer_height);
-- REQUIRE(flow.width() == Approx(1.125 * nozzle_diameter));
-+ REQUIRE_THAT(flow.width(), WithinRel(1.125 * nozzle_diameter));
- }
- }
- }
-@@ -216,10 +219,10 @@ SCENARIO("Flow: Flow math for bridges",
- WHEN("Flow role is frExternalPerimeter") {
- auto flow = Flow::bridging_flow(nozzle_diameter * sqrt(bridge_flow), nozzle_diameter);
- THEN("Bridge width is same as nozzle diameter") {
-- REQUIRE(flow.width() == Approx(nozzle_diameter));
-+ REQUIRE_THAT(flow.width(), WithinRel(nozzle_diameter));
- }
- THEN("Bridge spacing is same as nozzle diameter + BRIDGE_EXTRA_SPACING") {
-- REQUIRE(flow.spacing() == Approx(nozzle_diameter + BRIDGE_EXTRA_SPACING));
-+ REQUIRE_THAT(flow.spacing(), WithinRel(nozzle_diameter + BRIDGE_EXTRA_SPACING, EPSILON));
- }
- }
- }
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__gaps.cpp b/prusaslicer/patches/patch-tests_fff__print_test__gaps.cpp
deleted file mode 100644
index 4054e70edd..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_test__gaps.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/fff_print/test_gaps.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/fff_print/test_gaps.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include "libslic3r/GCodeReader.hpp"
- #include "libslic3r/Geometry/ConvexHull.hpp"
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__gcode.cpp b/prusaslicer/patches/patch-tests_fff__print_test__gcode.cpp
deleted file mode 100644
index 1dddd1b16b..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_test__gcode.cpp
+++ /dev/null
@@ -1,34 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/fff_print/test_gcode.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/fff_print/test_gcode.cpp
-@@ -2,7 +2,8 @@
- * Mostly ported from t/gcode.t
- */
-
--#include <catch2/catch.hpp>
-+#include <catch2/catch_approx.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include <memory>
- #include <regex>
-@@ -15,6 +16,7 @@
-
- using namespace Slic3r;
- using namespace Test;
-+using Catch::Approx;
-
- constexpr bool debug_files = false;
-
-@@ -66,7 +68,7 @@ TEST_CASE("Wiping speeds", "[GCode]") {
- INFO("Wipe moves don\'t retract faster than configured speed");
- CHECK(retract_speed < expected_retract_speed);
- }
-- INFO("No wiping after layer change")
-+ INFO("No wiping after layer change");
- CHECK(!wiping_on_new_layer);
- }
-
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__gcode__travels.cpp b/prusaslicer/patches/patch-tests_fff__print_test__gcode__travels.cpp
deleted file mode 100644
index 0daaf14ae6..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_test__gcode__travels.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/fff_print/test_gcode_travels.cpp.orig 2024-04-14 02:13:14.663964766 +0000
-+++ tests/fff_print/test_gcode_travels.cpp
-@@ -1,4 +1,9 @@
--#include <catch2/catch.hpp>
-+#include <vector>
-+
-+#include <catch2/catch_approx.hpp>
-+#include <catch2/catch_test_macros.hpp>
-+#include <catch2/matchers/catch_matchers.hpp>
-+#include <catch2/matchers/catch_matchers_vector.hpp>
- #include <libslic3r/GCode/Travels.hpp>
- #include <libslic3r/ExPolygon.hpp>
- #include <libslic3r/GCode.hpp>
-@@ -6,8 +11,9 @@
-
- using namespace Slic3r;
- using namespace Slic3r::GCode::Impl::Travels;
-+using Catch::Approx;
-
--struct ApproxEqualsPoints : public Catch::MatcherBase<Points> {
-+struct ApproxEqualsPoints : public Catch::Matchers::MatcherBase<Points> {
- ApproxEqualsPoints(const Points& expected, unsigned tolerance): expected(expected), tolerance(tolerance) {}
- bool match(const Points& points) const override {
- if (points.size() != expected.size()) {
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__gcodefindreplace.cpp b/prusaslicer/patches/patch-tests_fff__print_test__gcodefindreplace.cpp
deleted file mode 100644
index 5e1b12213a..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_test__gcodefindreplace.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/fff_print/test_gcodefindreplace.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/fff_print/test_gcodefindreplace.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include <memory>
-
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__gcodewriter.cpp b/prusaslicer/patches/patch-tests_fff__print_test__gcodewriter.cpp
deleted file mode 100644
index a3e5463bc2..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_test__gcodewriter.cpp
+++ /dev/null
@@ -1,49 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/fff_print/test_gcodewriter.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/fff_print/test_gcodewriter.cpp
-@@ -1,10 +1,13 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-+#include <catch2/matchers/catch_matchers.hpp>
-+#include <catch2/matchers/catch_matchers_string.hpp>
-
- #include <memory>
-
- #include "libslic3r/GCode/GCodeWriter.hpp"
-
- using namespace Slic3r;
-+using Catch::Matchers::Equals;
-
- SCENARIO("set_speed emits values with fixed-point output.", "[GCodeWriter]") {
-
-@@ -12,22 +15,22 @@ SCENARIO("set_speed emits values with fi
- 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::Equals("G1 F99999.123\n"));
-+ REQUIRE_THAT(writer.set_speed(99999.123), 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::Equals("G1 F1\n"));
-+ REQUIRE_THAT(writer.set_speed(1.0), 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::Equals("G1 F203.2\n"));
-+ REQUIRE_THAT(writer.set_speed(203.200022), 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::Equals("G1 F203.201\n"));
-+ REQUIRE_THAT(writer.set_speed(203.200522), Equals("G1 F203.201\n"));
- }
- }
- }
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__layers.cpp b/prusaslicer/patches/patch-tests_fff__print_test__layers.cpp
deleted file mode 100644
index a8eef41763..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_test__layers.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/fff_print/test_layers.cpp.orig 2024-04-14 02:13:14.684876605 +0000
-+++ tests/fff_print/test_layers.cpp
-@@ -2,11 +2,13 @@
- * Ported from t/layers.t
- */
-
--#include <catch2/catch.hpp>
-+#include <catch2/catch_approx.hpp>
-+#include <catch2/catch_test_macros.hpp>
- #include "test_data.hpp"
-
- using namespace Slic3r;
- using namespace Slic3r::Test;
-+using Catch::Approx;
-
- void check_layers(const DynamicPrintConfig& config) {
- GCodeReader parser;
-@@ -27,10 +29,10 @@ void check_layers(const DynamicPrintConf
- const double layer_height = config.opt_float("layer_height");
- INFO("Correct first layer height.");
- CHECK(z.at(0) == Approx(first_layer_height + z_offset));
-- INFO("Correct second layer height")
-+ INFO("Correct second layer height");
- CHECK(z.at(1) == Approx(first_layer_height + layer_height + z_offset));
-
-- INFO("Correct layer height")
-+ INFO("Correct layer height");
- for (const double increment : tcb::span{increments}.subspan(1)) {
- CHECK(increment == Approx(layer_height));
- }
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__model.cpp b/prusaslicer/patches/patch-tests_fff__print_test__model.cpp
deleted file mode 100644
index 5b678cf8b4..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_test__model.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/fff_print/test_model.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/fff_print/test_model.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include "libslic3r/libslic3r.h"
- #include "libslic3r/Model.hpp"
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__multi.cpp b/prusaslicer/patches/patch-tests_fff__print_test__multi.cpp
deleted file mode 100644
index d197423ae8..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_test__multi.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/fff_print/test_multi.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/fff_print/test_multi.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include <numeric>
- #include <sstream>
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__perimeters.cpp b/prusaslicer/patches/patch-tests_fff__print_test__perimeters.cpp
deleted file mode 100644
index 3ec4dd4abb..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_test__perimeters.cpp
+++ /dev/null
@@ -1,22 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/fff_print/test_perimeters.cpp.orig 2024-04-05 09:25:31.000000000 +0000
-+++ tests/fff_print/test_perimeters.cpp
-@@ -1,4 +1,5 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_approx.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include <numeric>
- #include <sstream>
-@@ -15,6 +16,7 @@
- #include "test_data.hpp"
-
- using namespace Slic3r;
-+using Catch::Approx;
-
- SCENARIO("Perimeter nesting", "[Perimeters]")
- {
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__print.cpp b/prusaslicer/patches/patch-tests_fff__print_test__print.cpp
deleted file mode 100644
index f4bdf8690e..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_test__print.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/fff_print/test_print.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/fff_print/test_print.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include "libslic3r/libslic3r.h"
- #include "libslic3r/Print.hpp"
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__printgcode.cpp b/prusaslicer/patches/patch-tests_fff__print_test__printgcode.cpp
deleted file mode 100644
index 03077abbd0..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_test__printgcode.cpp
+++ /dev/null
@@ -1,58 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/fff_print/test_printgcode.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/fff_print/test_printgcode.cpp
-@@ -1,4 +1,6 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-+#include <catch2/matchers/catch_matchers.hpp>
-+#include <catch2/matchers/catch_matchers_floating_point.hpp>
-
- #include "libslic3r/libslic3r.h"
- #include "libslic3r/GCodeReader.hpp"
-@@ -10,6 +12,7 @@
-
- using namespace Slic3r;
- using namespace Slic3r::Test;
-+using Catch::Matchers::WithinRel;
-
- boost::regex perimeters_regex("G1 X[-0-9.]* Y[-0-9.]* E[-0-9.]* ; perimeter");
- boost::regex infill_regex("G1 X[-0-9.]* Y[-0-9.]* E[-0-9.]* ; infill");
-@@ -79,7 +82,7 @@ SCENARIO( "PrintGCode basic functionalit
- reader.parse_buffer(gcode, [&final_z] (GCodeReader& self, const GCodeReader::GCodeLine& line) {
- final_z = std::max<double>(final_z, static_cast<double>(self.z())); // record the highest Z point we reach
- });
-- REQUIRE(final_z == Approx(20.));
-+ REQUIRE_THAT(final_z, WithinRel(20.));
- }
- }
- WHEN("output is executed with complete objects and two differently-sized meshes") {
-@@ -121,7 +124,7 @@ SCENARIO( "PrintGCode basic functionalit
- reader.parse_buffer(gcode, [&final_z] (GCodeReader& self, const GCodeReader::GCodeLine& line) {
- final_z = std::max(final_z, static_cast<double>(self.z())); // record the highest Z point we reach
- });
-- REQUIRE(final_z == Approx(20.1));
-+ REQUIRE_THAT(final_z, WithinRel(20.1, EPSILON));
- }
- THEN("Z height resets on object change") {
- double final_z = 0.0;
-@@ -257,14 +260,14 @@ SCENARIO( "PrintGCode basic functionalit
- REQUIRE(pos < gcode.size());
- double z = 0;
- REQUIRE((sscanf(gcode.data() + pos, "(%lf mm)", &z) == 1));
-- REQUIRE(z == Approx(20.));
-+ REQUIRE_THAT(z, WithinRel(20.));
- // Second object
- pos = gcode.find(";Layer:399 ", pos);
- REQUIRE(pos != std::string::npos);
- pos += token.size();
- REQUIRE(pos < gcode.size());
- REQUIRE((sscanf(gcode.data() + pos, "(%lf mm)", &z) == 1));
-- REQUIRE(z == Approx(20.));
-+ REQUIRE_THAT(z, WithinRel(20.));
- }
- }
- }
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__printobject.cpp b/prusaslicer/patches/patch-tests_fff__print_test__printobject.cpp
deleted file mode 100644
index eb53bab5a5..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_test__printobject.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/fff_print/test_printobject.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/fff_print/test_printobject.cpp
-@@ -1,4 +1,6 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-+#include <catch2/matchers/catch_matchers.hpp>
-+#include <catch2/matchers/catch_matchers_floating_point.hpp>
-
- #include "libslic3r/libslic3r.h"
- #include "libslic3r/Print.hpp"
-@@ -8,6 +10,7 @@
-
- using namespace Slic3r;
- using namespace Slic3r::Test;
-+using Catch::Matchers::WithinRel;
-
- SCENARIO("PrintObject: object layer heights", "[PrintObject]") {
- GIVEN("20mm cube and default initial config, initial layer height of 2mm") {
-@@ -25,7 +28,7 @@ SCENARIO("PrintObject: object layer heig
- AND_THEN("Each layer is approximately 2mm above the previous Z") {
- coordf_t last = 0.0;
- for (size_t i = 0; i < layers.size(); ++ i) {
-- REQUIRE((layers[i]->print_z - last) == Approx(2.0));
-+ REQUIRE_THAT((layers[i]->print_z - last), WithinRel(2.0));
- last = layers[i]->print_z;
- }
- }
-@@ -42,10 +45,10 @@ SCENARIO("PrintObject: object layer heig
- REQUIRE(layers.size() == 3);
- }
- AND_THEN("Layer 0 is at 2mm") {
-- REQUIRE(layers.front()->print_z == Approx(2.0));
-+ REQUIRE_THAT(layers.front()->print_z, WithinRel(2.0));
- }
- AND_THEN("Layer 1 is at 12mm") {
-- REQUIRE(layers[1]->print_z == Approx(12.0));
-+ REQUIRE_THAT(layers[1]->print_z, WithinRel(12.0));
- }
- }
- WHEN("generate_object_layers() is called for 15mm layer heights and nozzle diameter of 16mm") {
-@@ -60,10 +63,10 @@ SCENARIO("PrintObject: object layer heig
- REQUIRE(layers.size() == 2);
- }
- AND_THEN("Layer 0 is at 2mm") {
-- REQUIRE(layers[0]->print_z == Approx(2.0));
-+ REQUIRE_THAT(layers[0]->print_z, WithinRel(2.0));
- }
- AND_THEN("Layer 1 is at 17mm") {
-- REQUIRE(layers[1]->print_z == Approx(17.0));
-+ REQUIRE_THAT(layers[1]->print_z, WithinRel(17.0));
- }
- }
- #if 0
-@@ -79,7 +82,7 @@ SCENARIO("PrintObject: object layer heig
- CHECK(layers.size() == 5);
- coordf_t last = 2.0;
- for (size_t i = 1; i < layers.size(); i++) {
-- REQUIRE((layers[i]->print_z - last) == Approx(5.0));
-+ REQUIRE_THAT((layers[i]->print_z - last), WithinRel(5.0));
- last = layers[i]->print_z;
- }
- }
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__retraction.cpp b/prusaslicer/patches/patch-tests_fff__print_test__retraction.cpp
deleted file mode 100644
index 8ac4043037..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_test__retraction.cpp
+++ /dev/null
@@ -1,30 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/fff_print/test_retraction.cpp.orig 2024-04-14 02:13:14.728519199 +0000
-+++ tests/fff_print/test_retraction.cpp
-@@ -2,10 +2,12 @@
- * Ported from t/retraction.t
- */
-
--#include <catch2/catch.hpp>
-+#include <catch2/catch_approx.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include <libslic3r/GCodeReader.hpp>
- #include <libslic3r/Config.hpp>
-+using Catch::Approx;
-
- #include "test_data.hpp"
- #include <regex>
-@@ -77,7 +79,7 @@ void check_gcode(std::initializer_list<T
- lift_dist = line.dist_Z(self);
- }
- if (line.dist_Z(self) < 0) {
-- INFO("Must be lifted before going down.")
-+ INFO("Must be lifted before going down.");
- CHECK(lifted);
- INFO("Going down by the same amount of the lift or by the amount needed to get to next layer");
- CHECK((
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__seam__aligned.cpp b/prusaslicer/patches/patch-tests_fff__print_test__seam__aligned.cpp
deleted file mode 100644
index 991d2fe28e..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_test__seam__aligned.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-
---- tests/fff_print/test_seam_aligned.cpp.orig 2024-06-16 00:22:05.214495978 +0000
-+++ tests/fff_print/test_seam_aligned.cpp
-@@ -1,5 +1,6 @@
- #include <libslic3r/Point.hpp>
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-+#include <catch2/catch_approx.hpp>
- #include <libslic3r/GCode/SeamAligned.hpp>
- #include "test_data.hpp"
- #include <fstream>
-@@ -59,7 +60,7 @@ TEST_CASE("Get seam options", "[Seams][S
-
- CHECK(options.closest == 4);
- CHECK(options.adjacent == 0);
-- CHECK((options.on_edge - Vec2d{0.0, 0.3}).norm() == Approx(0.0));
-+ CHECK((options.on_edge - Vec2d{0.0, 0.3}).norm() == Catch::Approx(0.0));
- REQUIRE(options.snapped);
- CHECK(options.snapped == 0);
- }
-@@ -80,7 +81,7 @@ struct PickSeamOptionFixture
- TEST_CASE_METHOD(PickSeamOptionFixture, "Pick seam option", "[Seams][SeamAligned]") {
- auto [previous_index, next_index, position]{pick_seam_option(perimeter, options)};
- CHECK(previous_index == next_index);
-- CHECK((position - Vec2d{0.0, 0.0}).norm() == Approx(0.0));
-+ CHECK((position - Vec2d{0.0, 0.0}).norm() == Catch::Approx(0.0));
- }
-
- TEST_CASE_METHOD(PickSeamOptionFixture, "Pick seam option picks enforcer", "[Seams][SeamAligned]") {
-@@ -88,7 +89,7 @@ TEST_CASE_METHOD(PickSeamOptionFixture,
-
- auto [previous_index, next_index, position]{pick_seam_option(perimeter, options)};
- CHECK(previous_index == next_index);
-- CHECK((position - Vec2d{0.0, 0.5}).norm() == Approx(0.0));
-+ CHECK((position - Vec2d{0.0, 0.5}).norm() == Catch::Approx(0.0));
- }
-
- TEST_CASE_METHOD(PickSeamOptionFixture, "Nearest point", "[Seams][SeamAligned]") {
-@@ -97,7 +98,7 @@ TEST_CASE_METHOD(PickSeamOptionFixture,
- )};
- CHECK(result->previous_index == 0);
- CHECK(result->next_index == 1);
-- CHECK((result->position - Vec2d{0.4, 0.0}).norm() == Approx(0.0));
-+ CHECK((result->position - Vec2d{0.4, 0.0}).norm() == Catch::Approx(0.0));
- }
-
- TEST_CASE_METHOD(PickSeamOptionFixture, "Least visible point", "[Seams][SeamAligned]") {
-@@ -111,7 +112,7 @@ TEST_CASE_METHOD(PickSeamOptionFixture,
- )};
- CHECK(result->previous_index == 4);
- CHECK(result->next_index == 4);
-- CHECK((result->position - Vec2d{0.0, 0.5}).norm() == Approx(0.0));
-+ CHECK((result->position - Vec2d{0.0, 0.5}).norm() == Catch::Approx(0.0));
- }
-
- TEST_CASE_METHOD(Test::SeamsFixture, "Generate aligned seam", "[Seams][SeamAligned][Integration]") {
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__seam__geometry.cpp b/prusaslicer/patches/patch-tests_fff__print_test__seam__geometry.cpp
deleted file mode 100644
index 0b7b47f7d4..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_test__seam__geometry.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-
---- tests/fff_print/test_seam_geometry.cpp.orig 2024-06-16 00:13:41.674445563 +0000
-+++ tests/fff_print/test_seam_geometry.cpp
-@@ -1,5 +1,8 @@
- #include <libslic3r/Point.hpp>
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-+#include <catch2/catch_approx.hpp>
-+#include <catch2/matchers/catch_matchers.hpp>
-+#include <catch2/matchers/catch_matchers_vector.hpp>
- #include <libslic3r/GCode/SeamGeometry.hpp>
- #include <libslic3r/Geometry.hpp>
-
-@@ -69,7 +72,7 @@ TEST_CASE("Vertex angle calculation coun
-
- CHECK(angles.size() == 4);
- for (const double angle : angles) {
-- CHECK(angle == Approx(-M_PI / 2));
-+ CHECK(angle == Catch::Approx(-M_PI / 2));
- }
- }
-
-@@ -79,7 +82,7 @@ TEST_CASE("Vertex angle calculation cloc
-
- CHECK(angles.size() == 4);
- for (const double angle : angles) {
-- CHECK(angle == Approx(M_PI / 2));
-+ CHECK(angle == Catch::Approx(M_PI / 2));
- }
- }
-
-@@ -121,7 +124,7 @@ TEST_CASE("Vertex angle is rotation agno
- );
-
- std::vector<double> rotated_angles = Seams::Geometry::get_vertex_angles(points, 0.1);
-- CHECK(rotated_angles[1] == Approx(angles[1]));
-+ CHECK(rotated_angles[1] == Catch::Approx(angles[1]));
- }
-
- TEST_CASE("Calculate overhangs", "[Seams][SeamGeometry]") {
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__seam__perimeters.cpp b/prusaslicer/patches/patch-tests_fff__print_test__seam__perimeters.cpp
deleted file mode 100644
index 997701c95c..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_test__seam__perimeters.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-
---- tests/fff_print/test_seam_perimeters.cpp.orig 2024-06-16 00:15:07.448492235 +0000
-+++ tests/fff_print/test_seam_perimeters.cpp
-@@ -2,7 +2,8 @@
- #include "libslic3r/GCode/SeamPerimeters.hpp"
- #include "libslic3r/Layer.hpp"
- #include "libslic3r/Point.hpp"
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-+#include <catch2/catch_approx.hpp>
- #include <libslic3r/GCode/SeamGeometry.hpp>
- #include <libslic3r/Geometry.hpp>
- #include <fstream>
-@@ -27,7 +28,7 @@ TEST_CASE("Oversample painted", "[Seams]
- )};
-
- REQUIRE(points.size() == 8);
-- CHECK((points[1] - Vec2d{0.2, 0.0}).norm() == Approx(0.0));
-+ CHECK((points[1] - Vec2d{0.2, 0.0}).norm() == Catch::Approx(0.0));
-
- points = Perimeters::Impl::oversample_painted(
- Seams::Geometry::unscaled(square.contour.points), is_painted, 1.0, 0.199
-@@ -53,8 +54,8 @@ TEST_CASE("Remove redundant points", "[S
-
- REQUIRE(resulting_points.size() == 6);
- REQUIRE(resulting_point_types.size() == 6);
-- CHECK((resulting_points[3] - Vec2d{3.0, 0.0}).norm() == Approx(0.0));
-- CHECK((resulting_points[4] - Vec2d{3.0, 2.0}).norm() == Approx(0.0));
-+ CHECK((resulting_points[3] - Vec2d{3.0, 0.0}).norm() == Catch::Approx(0.0));
-+ CHECK((resulting_points[4] - Vec2d{3.0, 2.0}).norm() == Catch::Approx(0.0));
- CHECK(resulting_point_types[3] == PointType::blocker);
- CHECK(resulting_point_types[4] == PointType::blocker);
- }
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__seam__random.cpp b/prusaslicer/patches/patch-tests_fff__print_test__seam__random.cpp
deleted file mode 100644
index 784ff55ae1..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_test__seam__random.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-
---- tests/fff_print/test_seam_random.cpp.orig 2024-06-16 00:27:17.913045037 +0000
-+++ tests/fff_print/test_seam_random.cpp
-@@ -1,5 +1,5 @@
- #include <libslic3r/Point.hpp>
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
- #include <libslic3r/GCode/SeamRandom.hpp>
- #include "test_data.hpp"
- #include <fstream>
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__seam__rear.cpp b/prusaslicer/patches/patch-tests_fff__print_test__seam__rear.cpp
deleted file mode 100644
index 11881f30be..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_test__seam__rear.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-
---- tests/fff_print/test_seam_rear.cpp.orig 2024-06-16 00:25:58.442182846 +0000
-+++ tests/fff_print/test_seam_rear.cpp
-@@ -1,5 +1,5 @@
- #include <libslic3r/Point.hpp>
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
- #include <libslic3r/GCode/SeamRear.hpp>
- #include "test_data.hpp"
- #include <fstream>
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__seam__scarf.cpp b/prusaslicer/patches/patch-tests_fff__print_test__seam__scarf.cpp
deleted file mode 100644
index a6efabb0f6..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_test__seam__scarf.cpp
+++ /dev/null
@@ -1,20 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/fff_print/test_seam_scarf.cpp.orig 2025-02-17 06:53:05.395956984 +0000
-+++ tests/fff_print/test_seam_scarf.cpp
-@@ -1,9 +1,11 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_approx.hpp>
-+#include <catch2/catch_test_macros.hpp>
- #include <libslic3r/GCode/SeamScarf.hpp>
- #include <libslic3r/GCode/SmoothPath.hpp>
-
- using namespace Slic3r;
- using Seams::Scarf::Impl::PathPoint;
-+using Catch::Approx;
-
- TEST_CASE("Get path point", "[Seams][Scarf]") {
- using Seams::Scarf::Impl::get_path_point;
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__seam__shells.cpp b/prusaslicer/patches/patch-tests_fff__print_test__seam__shells.cpp
deleted file mode 100644
index e1c5530ed7..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_test__seam__shells.cpp
+++ /dev/null
@@ -1,22 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-
---- tests/fff_print/test_seam_shells.cpp.orig 2024-06-16 00:12:02.757306546 +0000
-+++ tests/fff_print/test_seam_shells.cpp
-@@ -1,4 +1,5 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-+#include <catch2/catch_approx.hpp>
- #include <filesystem>
- #include <fstream>
- #include "libslic3r/ClipperUtils.hpp"
-@@ -37,7 +38,7 @@ TEST_CASE_METHOD(ProjectionFixture, "Pro
- REQUIRE(result.size() == 1);
- REQUIRE(result[0].polygon.size() == 4);
- // Boundary polygon is picked.
-- CHECK(result[0].polygon[0].x() == Approx(scaled(-(1.0 + extrusion_width / 2.0 + 0.1))));
-+ CHECK(result[0].polygon[0].x() == Catch::Approx(scaled(-(1.0 + extrusion_width / 2.0 + 0.1))));
- }
-
- TEST_CASE_METHOD(ProjectionFixture, "Project to geometry does not match", "[Seams][SeamShells]") {
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__shells.cpp b/prusaslicer/patches/patch-tests_fff__print_test__shells.cpp
deleted file mode 100644
index d482a1eab7..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_test__shells.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/fff_print/test_shells.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/fff_print/test_shells.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include "libslic3r/GCodeReader.hpp"
-
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__skirt__brim.cpp b/prusaslicer/patches/patch-tests_fff__print_test__skirt__brim.cpp
deleted file mode 100644
index e38108cd84..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_test__skirt__brim.cpp
+++ /dev/null
@@ -1,68 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/fff_print/test_skirt_brim.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/fff_print/test_skirt_brim.cpp
-@@ -1,4 +1,6 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-+#include <catch2/matchers/catch_matchers.hpp>
-+#include <catch2/matchers/catch_matchers_floating_point.hpp>
-
- #include "libslic3r/GCodeReader.hpp"
- #include "libslic3r/Config.hpp"
-@@ -10,6 +12,7 @@
-
- using namespace Slic3r::Test;
- using namespace Slic3r;
-+using Catch::Matchers::WithinRel;
-
- /// Helper method to find the tool used for the brim (always the first extrusion)
- static int get_brim_tool(const std::string &gcode)
-@@ -54,7 +57,7 @@ TEST_CASE("Skirt height is honored", "[S
- double support_speed = config.opt<Slic3r::ConfigOptionFloat>("support_material_speed")->value * MM_PER_MIN;
- GCodeReader parser;
- parser.parse_buffer(gcode, [&layers_with_skirt, &support_speed] (Slic3r::GCodeReader &self, const Slic3r::GCodeReader::GCodeLine &line) {
-- if (line.extruding(self) && self.f() == Approx(support_speed)) {
-+ if (line.extruding(self) && WithinRel(support_speed).match(self.f())) {
- layers_with_skirt[self.z()] = 1;
- }
- });
-@@ -90,8 +93,8 @@ SCENARIO("Original Slic3r Skirt/Brim tes
- double support_speed = config.opt<Slic3r::ConfigOptionFloat>("support_material_speed")->value * MM_PER_MIN;
- Slic3r::GCodeReader parser;
- parser.parse_buffer(gcode, [&brim_generated, support_speed] (Slic3r::GCodeReader& self, const Slic3r::GCodeReader::GCodeLine& line) {
-- if (self.z() == Approx(0.3) || line.new_Z(self) == Approx(0.3)) {
-- if (line.extruding(self) && self.f() == Approx(support_speed)) {
-+ if (WithinRel(0.3, EPSILON).match(self.z()) || WithinRel(0.3, EPSILON).match(line.new_Z(self))) {
-+ if (line.extruding(self) && WithinRel(support_speed, EPSILON).match(self.f())) {
- brim_generated = true;
- }
- }
-@@ -234,20 +237,20 @@ SCENARIO("Original Slic3r Skirt/Brim tes
- // std::cerr << line.cmd() << "\n";
- if (boost::starts_with(line.cmd(), "T")) {
- tool = atoi(line.cmd().data() + 1);
-- } else if (self.z() == Approx(config.opt<ConfigOptionFloat>("first_layer_height")->value)) {
-+ } else if (WithinRel(config.opt<ConfigOptionFloat>("first_layer_height")->value).match(self.z())) {
- // on first layer
- if (line.extruding(self) && line.dist_XY(self) > 0) {
- float speed = ( self.f() > 0 ? self.f() : line.new_F(self));
- // std::cerr << "Tool " << tool << "\n";
-- if (speed == Approx(support_speed) && tool == config.opt_int("perimeter_extruder") - 1) {
-+ if (WithinRel(support_speed).match(speed) && tool == config.opt_int("perimeter_extruder") - 1) {
- // Skirt uses first material extruder, support material speed.
- skirt_length += line.dist_XY(self);
- } else
- extrusion_points.push_back(Slic3r::Point::new_scale(line.new_X(self), line.new_Y(self)));
- }
- }
-- if (self.z() == Approx(0.3) || line.new_Z(self) == Approx(0.3)) {
-- if (line.extruding(self) && self.f() == Approx(support_speed)) {
-+ if (WithinRel(0.3).match(self.z()) || WithinRel(0.3).match(line.new_Z(self))) {
-+ if (line.extruding(self) && WithinRel(support_speed).match(self.f())) {
- }
- }
- });
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__support__material.cpp b/prusaslicer/patches/patch-tests_fff__print_test__support__material.cpp
deleted file mode 100644
index 71b0b4ef63..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_test__support__material.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/fff_print/test_support_material.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/fff_print/test_support_material.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include "libslic3r/GCodeReader.hpp"
- #include "libslic3r/Layer.hpp"
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__thin__walls.cpp b/prusaslicer/patches/patch-tests_fff__print_test__thin__walls.cpp
deleted file mode 100644
index 3288540370..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_test__thin__walls.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/fff_print/test_thin_walls.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/fff_print/test_thin_walls.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include <numeric>
- #include <sstream>
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__trianglemesh.cpp b/prusaslicer/patches/patch-tests_fff__print_test__trianglemesh.cpp
deleted file mode 100644
index e67117a0aa..0000000000
--- a/prusaslicer/patches/patch-tests_fff__print_test__trianglemesh.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/fff_print/test_trianglemesh.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/fff_print/test_trianglemesh.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include "libslic3r/TriangleMesh.hpp"
- #include "libslic3r/TriangleMeshSlicer.hpp"
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__3mf.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__3mf.cpp
deleted file mode 100644
index 09de8cba03..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__3mf.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_3mf.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/libslic3r/test_3mf.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include "libslic3r/Model.hpp"
- #include "libslic3r/Format/3mf.hpp"
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__aabbindirect.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__aabbindirect.cpp
deleted file mode 100644
index ee1c9d0f32..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__aabbindirect.cpp
+++ /dev/null
@@ -1,98 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_aabbindirect.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/libslic3r/test_aabbindirect.cpp
-@@ -1,5 +1,7 @@
- #include <algorithm>
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-+#include <catch2/matchers/catch_matchers.hpp>
-+#include <catch2/matchers/catch_matchers_floating_point.hpp>
- #include <test_utils.hpp>
-
- #include <libslic3r/TriangleMesh.hpp>
-@@ -7,6 +9,8 @@
- #include <libslic3r/AABBTreeLines.hpp>
-
- using namespace Slic3r;
-+using Catch::Matchers::WithinRel;
-+using Catch::Matchers::WithinAbs;
-
- TEST_CASE("Building a tree over a box, ray caster and closest query", "[AABBIndirect]")
- {
-@@ -24,7 +28,7 @@ TEST_CASE("Building a tree over a box, r
- hit);
-
- REQUIRE(intersected);
-- REQUIRE(hit.t == Approx(5.));
-+ REQUIRE_THAT(hit.t, WithinRel(5.));
-
- std::vector<igl::Hit> hits;
- bool intersected2 = AABBTreeIndirect::intersect_ray_all_hits(
-@@ -35,8 +39,8 @@ TEST_CASE("Building a tree over a box, r
- hits);
- REQUIRE(intersected2);
- REQUIRE(hits.size() == 2);
-- REQUIRE(hits.front().t == Approx(5.));
-- REQUIRE(hits.back().t == Approx(6.));
-+ REQUIRE_THAT(hits.front().t, WithinRel(5.));
-+ REQUIRE_THAT(hits.back().t, WithinRel(6.));
-
- size_t hit_idx;
- Vec3d closest_point;
-@@ -45,20 +49,20 @@ TEST_CASE("Building a tree over a box, r
- tree,
- Vec3d(0.3, 0.5, -5.),
- hit_idx, closest_point);
-- REQUIRE(squared_distance == Approx(5. * 5.));
-- REQUIRE(closest_point.x() == Approx(0.3));
-- REQUIRE(closest_point.y() == Approx(0.5));
-- REQUIRE(closest_point.z() == Approx(0.));
-+ REQUIRE_THAT(squared_distance, WithinRel(5. * 5.));
-+ REQUIRE_THAT(closest_point.x(), WithinRel(0.3));
-+ REQUIRE_THAT(closest_point.y(), WithinRel(0.5));
-+ REQUIRE_THAT(closest_point.z(), WithinAbs(0., EPSILON));
-
- squared_distance = AABBTreeIndirect::squared_distance_to_indexed_triangle_set(
- tmesh.its.vertices, tmesh.its.indices,
- tree,
- Vec3d(0.3, 0.5, 5.),
- hit_idx, closest_point);
-- REQUIRE(squared_distance == Approx(4. * 4.));
-- REQUIRE(closest_point.x() == Approx(0.3));
-- REQUIRE(closest_point.y() == Approx(0.5));
-- REQUIRE(closest_point.z() == Approx(1.));
-+ REQUIRE_THAT(squared_distance, WithinRel(4. * 4.));
-+ REQUIRE_THAT(closest_point.x(), WithinRel(0.3));
-+ REQUIRE_THAT(closest_point.y(), WithinRel(0.5));
-+ REQUIRE_THAT(closest_point.z(), WithinRel(1.));
- }
-
- TEST_CASE("Creating a several 2d lines, testing closest point query", "[AABBIndirect]")
-@@ -75,17 +79,17 @@ TEST_CASE("Creating a several 2d lines,
- Vec2d hit_point_out;
- auto sqr_dist = AABBTreeLines::squared_distance_to_indexed_lines(lines, tree, Vec2d(0.0, 0.0), hit_idx_out,
- hit_point_out);
-- REQUIRE(sqr_dist == Approx(0.0));
-+ REQUIRE_THAT(sqr_dist, WithinAbs(0.0, EPSILON));
- REQUIRE((hit_idx_out == 0 || hit_idx_out == 3));
-- REQUIRE(hit_point_out.x() == Approx(0.0));
-- REQUIRE(hit_point_out.y() == Approx(0.0));
-+ REQUIRE_THAT(hit_point_out.x(), WithinAbs(0.0, EPSILON));
-+ REQUIRE_THAT(hit_point_out.y(), WithinAbs(0.0, EPSILON));
-
- sqr_dist = AABBTreeLines::squared_distance_to_indexed_lines(lines, tree, Vec2d(1.5, 0.5), hit_idx_out,
- hit_point_out);
-- REQUIRE(sqr_dist == Approx(0.25));
-+ REQUIRE_THAT(sqr_dist, WithinRel(0.25));
- REQUIRE(hit_idx_out == 1);
-- REQUIRE(hit_point_out.x() == Approx(1.0));
-- REQUIRE(hit_point_out.y() == Approx(0.5));
-+ REQUIRE_THAT(hit_point_out.x(), WithinRel(1.0));
-+ REQUIRE_THAT(hit_point_out.y(), WithinRel(0.5));
- }
-
- TEST_CASE("Creating a several 2d lines, testing all lines in radius query", "[AABBIndirect]")
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__anyptr.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__anyptr.cpp
deleted file mode 100644
index 2b04a6e4fb..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__anyptr.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_anyptr.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/libslic3r/test_anyptr.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include <libslic3r/libslic3r.h>
- #include <libslic3r/AnyPtr.hpp>
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__arachne.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__arachne.cpp
deleted file mode 100644
index b289234497..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__arachne.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_arachne.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/libslic3r/test_arachne.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include "libslic3r/Arachne/WallToolPaths.hpp"
- #include "libslic3r/ClipperUtils.hpp"
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__arc__welder.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__arc__welder.cpp
deleted file mode 100644
index c7de0b555b..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__arc__welder.cpp
+++ /dev/null
@@ -1,22 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_arc_welder.cpp.orig 2024-04-14 02:13:14.797323585 +0000
-+++ tests/libslic3r/test_arc_welder.cpp
-@@ -1,4 +1,5 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_approx.hpp>
-+#include <catch2/catch_test_macros.hpp>
- #include <test_utils.hpp>
-
- #include <random>
-@@ -9,6 +10,7 @@
- #include <libslic3r/libslic3r.h>
-
- using namespace Slic3r;
-+using Catch::Approx;
-
- TEST_CASE("arc basics", "[ArcWelder]") {
- using namespace Slic3r::Geometry;
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__astar.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__astar.cpp
deleted file mode 100644
index 81a77ba037..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__astar.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_astar.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/libslic3r/test_astar.cpp
-@@ -1,4 +1,7 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_template_test_macros.hpp>
-+#include <catch2/catch_test_macros.hpp>
-+#include <catch2/matchers/catch_matchers.hpp>
-+#include <catch2/matchers/catch_matchers_floating_point.hpp>
-
- #include "libslic3r/BoundingBox.hpp"
- #include "libslic3r/AStar.hpp"
-@@ -6,6 +9,7 @@
- #include "libslic3r/PointGrid.hpp"
-
- using namespace Slic3r;
-+using Catch::Matchers::WithinRel;
-
- TEST_CASE("Testing basic invariants of AStar", "[AStar]") {
- struct DummyTracer {
-@@ -397,7 +401,7 @@ TEST_CASE("Zero heuristic function shoul
- // arrive to the source within less hops than the full number of nodes.
- for (size_t i = 0, k = 0; i < graph.nodes.size(); ++i, k = 0) {
- GraphTracer::QNode *q = &graph.nodes[i];
-- REQUIRE(q->g == Approx(ref_distances[i]));
-+ REQUIRE_THAT(q->g, WithinRel(ref_distances[i]));
- while (k++ < graph.nodes.size() && q->parent != astar::Unassigned)
- q = &graph.nodes[q->parent];
-
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__clipper__offset.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__clipper__offset.cpp
deleted file mode 100644
index 2bb4ab6e73..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__clipper__offset.cpp
+++ /dev/null
@@ -1,113 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_clipper_offset.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/libslic3r/test_clipper_offset.cpp
-@@ -1,4 +1,6 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-+#include <catch2/matchers/catch_matchers.hpp>
-+#include <catch2/matchers/catch_matchers_floating_point.hpp>
-
- #include <iostream>
- #include <boost/filesystem.hpp>
-@@ -8,6 +10,7 @@
- #include "libslic3r/SVG.hpp"
-
- using namespace Slic3r;
-+using Catch::Matchers::WithinRel;
-
- // #define TESTS_EXPORT_SVGS
-
-@@ -32,7 +35,7 @@ SCENARIO("Constant offset", "[ClipperUti
- #endif
- THEN("Area is 22^2mm2") {
- REQUIRE(output.size() == 1);
-- REQUIRE(output.front().area() == Approx(22. * 22. * s * s));
-+ REQUIRE_THAT(output.front().area(), WithinRel(22. * 22. * s * s));
- }
- }
- DYNAMIC_SECTION("minus 1mm, miter " << miter << "x") {
-@@ -46,7 +49,7 @@ SCENARIO("Constant offset", "[ClipperUti
- #endif
- THEN("Area is 18^2mm2") {
- REQUIRE(output.size() == 1);
-- REQUIRE(output.front().area() == Approx(18. * 18. * s * s));
-+ REQUIRE_THAT(output.front().area(), WithinRel(18. * 18. * s * s));
- }
- }
- }
-@@ -64,7 +67,7 @@ SCENARIO("Constant offset", "[ClipperUti
- #endif
- THEN("Area is 22^2mm2") {
- REQUIRE(output.size() == 1);
-- REQUIRE(output.front().area() == Approx(22. * 22. * s * s));
-+ REQUIRE_THAT(output.front().area(), WithinRel(22. * 22. * s * s));
- }
- }
- DYNAMIC_SECTION("minus 1mm, miter " << miter << "x") {
-@@ -78,7 +81,7 @@ SCENARIO("Constant offset", "[ClipperUti
- #endif
- THEN("Area is 18^2mm2") {
- REQUIRE(output.size() == 1);
-- REQUIRE(output.front().area() == Approx(18. * 18. * s * s));
-+ REQUIRE_THAT(output.front().area(), WithinRel(18. * 18. * s * s));
- }
- }
- }
-@@ -106,7 +109,7 @@ SCENARIO("Constant offset", "[ClipperUti
- #endif
- THEN("Area is 22^2-8^2 mm2") {
- REQUIRE(output.size() == 1);
-- REQUIRE(output.front().area() == Approx((22. * 22. - 8. * 8.) * s * s));
-+ REQUIRE_THAT(output.front().area(), WithinRel((22. * 22. - 8. * 8.) * s * s));
- }
- }
- WHEN("minus 1mm") {
-@@ -120,7 +123,7 @@ SCENARIO("Constant offset", "[ClipperUti
- #endif
- THEN("Area is 18^2-12^2 mm2") {
- REQUIRE(output.size() == 1);
-- REQUIRE(output.front().area() == Approx((18. * 18. - 12. * 12.) * s * s));
-+ REQUIRE_THAT(output.front().area(), WithinRel((18. * 18. - 12. * 12.) * s * s));
- }
- }
- }
-@@ -140,7 +143,7 @@ SCENARIO("Constant offset", "[ClipperUti
- #endif
- THEN("Area is 22^2-8^2 mm2") {
- REQUIRE(output.size() == 1);
-- REQUIRE(output.front().area() == Approx((22. * 22. - 8. * 8.) * s * s));
-+ REQUIRE_THAT(output.front().area(), WithinRel((22. * 22. - 8. * 8.) * s * s));
- }
- }
- WHEN("minus 1mm") {
-@@ -154,7 +157,7 @@ SCENARIO("Constant offset", "[ClipperUti
- #endif
- THEN("Area is 18^2-12^2 mm2") {
- REQUIRE(output.size() == 1);
-- REQUIRE(output.front().area() == Approx((18. * 18. - 12. * 12.) * s * s));
-+ REQUIRE_THAT(output.front().area(), WithinRel((18. * 18. - 12. * 12.) * s * s));
- }
- }
- }
-@@ -186,7 +189,7 @@ SCENARIO("Constant offset", "[ClipperUti
- #endif
- THEN("Area matches") {
- REQUIRE(output.size() == 1);
-- REQUIRE(output.front().area() == Approx(area_offsetted));
-+ REQUIRE_THAT(output.front().area(), WithinRel(area_offsetted, EPSILON));
- }
- }
- }
-@@ -205,7 +208,7 @@ SCENARIO("Constant offset", "[ClipperUti
- #endif
- THEN("Area matches") {
- REQUIRE(output.size() == 1);
-- REQUIRE(output.front().area() == Approx(area_offsetted));
-+ REQUIRE_THAT(output.front().area(), WithinRel(area_offsetted, EPSILON));
- }
- }
- }
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__clipper__utils.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__clipper__utils.cpp
deleted file mode 100644
index baf1452fd6..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__clipper__utils.cpp
+++ /dev/null
@@ -1,139 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_clipper_utils.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/libslic3r/test_clipper_utils.cpp
-@@ -1,4 +1,6 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-+#include <catch2/matchers/catch_matchers.hpp>
-+#include <catch2/matchers/catch_matchers_floating_point.hpp>
-
- #include <numeric>
- #include <iostream>
-@@ -9,6 +11,7 @@
- #include "libslic3r/SVG.hpp"
-
- using namespace Slic3r;
-+using Catch::Matchers::WithinRel;
-
- SCENARIO("Various Clipper operations - xs/t/11_clipper.t", "[ClipperUtils]") {
- // CCW oriented contour
-@@ -122,7 +125,7 @@ SCENARIO("Various Clipper operations - x
- REQUIRE(result.size() == 1);
- }
- THEN("intersection_pl - result has same length as subject polyline") {
-- REQUIRE(result.front().length() == Approx(subject.length()));
-+ REQUIRE_THAT(result.front().length(), WithinRel(subject.length()));
- }
- }
-
-@@ -185,7 +188,7 @@ SCENARIO("Various Clipper operations - t
- ExPolygon match({ { 20, 18 }, { 10, 18 }, { 10, 12 }, { 20, 12 } },
- { { 14, 16 }, { 16, 16 }, { 16, 14 }, { 14, 14 } });
- REQUIRE(intersection.size() == 1);
-- REQUIRE(intersection.front().area() == Approx(match.area()));
-+ REQUIRE_THAT(intersection.front().area(), WithinRel(match.area()));
- }
- }
-
-@@ -193,39 +196,39 @@ SCENARIO("Various Clipper operations - t
- WHEN("Clipping line 1") {
- Polylines intersection = intersection_pl({ Polyline { { 15, 18 }, { 15, 15 } } }, expolygons);
- THEN("line is clipped to square with hole") {
-- REQUIRE((Vec2f(15, 18) - Vec2f(15, 16)).norm() == Approx(intersection.front().length()));
-+ REQUIRE_THAT((Vec2f(15, 18) - Vec2f(15, 16)).norm(), WithinRel(intersection.front().length()));
- }
- }
- WHEN("Clipping line 2") {
- Polylines intersection = intersection_pl({ Polyline { { 15, 15 }, { 15, 12 } } }, expolygons);
- THEN("line is clipped to square with hole") {
-- REQUIRE((Vec2f(15, 14) - Vec2f(15, 12)).norm() == Approx(intersection.front().length()));
-+ REQUIRE_THAT((Vec2f(15, 14) - Vec2f(15, 12)).norm(), WithinRel(intersection.front().length()));
- }
- }
- WHEN("Clipping line 3") {
- Polylines intersection = intersection_pl({ Polyline { { 12, 18 }, { 18, 18 } } }, expolygons);
- THEN("line is clipped to square with hole") {
-- REQUIRE((Vec2f(18, 18) - Vec2f(12, 18)).norm() == Approx(intersection.front().length()));
-+ REQUIRE_THAT((Vec2f(18, 18) - Vec2f(12, 18)).norm(), WithinRel(intersection.front().length()));
- }
- }
- WHEN("Clipping line 4") {
- Polylines intersection = intersection_pl({ Polyline { { 5, 15 }, { 30, 15 } } }, expolygons);
- THEN("line is clipped to square with hole") {
-- REQUIRE((Vec2f(14, 15) - Vec2f(10, 15)).norm() == Approx(intersection.front().length()));
-- REQUIRE((Vec2f(20, 15) - Vec2f(16, 15)).norm() == Approx(intersection[1].length()));
-+ REQUIRE_THAT((Vec2f(14, 15) - Vec2f(10, 15)).norm(), WithinRel(intersection.front().length()));
-+ REQUIRE_THAT((Vec2f(20, 15) - Vec2f(16, 15)).norm(), WithinRel(intersection[1].length()));
- }
- }
- WHEN("Clipping line 5") {
- Polylines intersection = intersection_pl({ Polyline { { 30, 15 }, { 5, 15 } } }, expolygons);
- THEN("reverse line is clipped to square with hole") {
-- REQUIRE((Vec2f(20, 15) - Vec2f(16, 15)).norm() == Approx(intersection.front().length()));
-- REQUIRE((Vec2f(14, 15) - Vec2f(10, 15)).norm() == Approx(intersection[1].length()));
-+ REQUIRE_THAT((Vec2f(20, 15) - Vec2f(16, 15)).norm(), WithinRel(intersection.front().length()));
-+ REQUIRE_THAT((Vec2f(14, 15) - Vec2f(10, 15)).norm(), WithinRel(intersection[1].length()));
- }
- }
- WHEN("Clipping line 6") {
- Polylines intersection = intersection_pl({ Polyline { { 10, 18 }, { 20, 18 } } }, expolygons);
- THEN("tangent line is clipped to square with hole") {
-- REQUIRE((Vec2f(20, 18) - Vec2f(10, 18)).norm() == Approx(intersection.front().length()));
-+ REQUIRE_THAT((Vec2f(20, 18) - Vec2f(10, 18)).norm(), WithinRel(intersection.front().length()));
- }
- }
- }
-@@ -246,7 +249,7 @@ SCENARIO("Various Clipper operations - t
- ExPolygons diff = Slic3r::diff_ex(Polygons{ square, square2 }, Polygons{ hole });
- THEN("difference of a cw from two ccw is a contour with one hole") {
- REQUIRE(diff.size() == 1);
-- REQUIRE(diff.front().area() == Approx(ExPolygon({ {40, 40}, {0, 40}, {0, 0}, {40, 0} }, { {15, 25}, {25, 25}, {25, 15}, {15, 15} }).area()));
-+ REQUIRE_THAT(diff.front().area(), WithinRel(ExPolygon({ {40, 40}, {0, 40}, {0, 0}, {40, 0} }, { {15, 25}, {25, 25}, {25, 15}, {15, 15} }).area()));
- }
- }
- }
-@@ -296,8 +299,8 @@ SCENARIO("Various Clipper operations - t
- auto line = Polyline::new_scale({ { 152.742,288.086671142818 }, { 152.742,34.166466971035 } });
- Polylines intersection = intersection_pl(line, to_polygons(circle_with_hole));
- THEN("clipped to two pieces") {
-- REQUIRE(intersection.front().length() == Approx((Vec2d(152742000, 215178843) - Vec2d(152742000, 288086661)).norm()));
-- REQUIRE(intersection[1].length() == Approx((Vec2d(152742000, 35166477) - Vec2d(152742000, 108087507)).norm()));
-+ REQUIRE_THAT(intersection.front().length(), WithinRel((Vec2d(152742000, 215178843) - Vec2d(152742000, 288086661)).norm()));
-+ REQUIRE_THAT(intersection[1].length(), WithinRel((Vec2d(152742000, 35166477) - Vec2d(152742000, 108087507)).norm()));
- }
- }
- }
-@@ -360,25 +363,25 @@ TEST_CASE("Traversing Clipper PolyTree",
-
- SECTION("Traverse into Polygons WITHOUT spatial ordering") {
- Polygons output;
-- REQUIRE(area_sum == Approx(polytree_area(tree.GetFirst(), &output)));
-+ REQUIRE_THAT(area_sum, WithinRel(polytree_area(tree.GetFirst(), &output)));
- REQUIRE(output.size() == reference.size());
- }
-
- SECTION("Traverse into ExPolygons WITHOUT spatial ordering") {
- ExPolygons output;
-- REQUIRE(area_sum == Approx(polytree_area(tree.GetFirst(), &output)));
-+ REQUIRE_THAT(area_sum, WithinRel(polytree_area(tree.GetFirst(), &output)));
- REQUIRE(count_polys(output) == reference.size());
- }
-
- SECTION("Traverse into Polygons WITH spatial ordering") {
- Polygons output;
-- REQUIRE(area_sum == Approx(polytree_area<e_ordering::ON>(tree.GetFirst(), &output)));
-+ REQUIRE_THAT(area_sum, WithinRel(polytree_area<e_ordering::ON>(tree.GetFirst(), &output)));
- REQUIRE(output.size() == reference.size());
- }
-
- SECTION("Traverse into ExPolygons WITH spatial ordering") {
- ExPolygons output;
-- REQUIRE(area_sum == Approx(polytree_area<e_ordering::ON>(tree.GetFirst(), &output)));
-+ REQUIRE_THAT(area_sum, WithinRel(polytree_area<e_ordering::ON>(tree.GetFirst(), &output)));
- REQUIRE(count_polys(output) == reference.size());
- }
- }
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__color.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__color.cpp
deleted file mode 100644
index 10d0de7975..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__color.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_color.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/libslic3r/test_color.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
- #include "libslic3r/libslic3r.h"
-
- #include "libslic3r/Color.hpp"
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__config.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__config.cpp
deleted file mode 100644
index 962e8efd73..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__config.cpp
+++ /dev/null
@@ -1,14 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_config.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/libslic3r/test_config.cpp
-@@ -1,4 +1,5 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-+#include <catch2/matchers/catch_matchers_vector.hpp>
-
- #include "libslic3r/Config.hpp"
- #include "libslic3r/PrintConfig.hpp"
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__curve__fitting.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__curve__fitting.cpp
deleted file mode 100644
index fd21f2d14b..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__curve__fitting.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_curve_fitting.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/libslic3r/test_curve_fitting.cpp
-@@ -1,10 +1,14 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-+#include <catch2/matchers/catch_matchers.hpp>
-+#include <catch2/matchers/catch_matchers_floating_point.hpp>
- #include <test_utils.hpp>
-
- #include <libslic3r/Geometry/Curves.hpp>
- #include <libslic3r/Utils.hpp>
- #include <libslic3r/SVG.hpp>
-
-+using Catch::Matchers::WithinRel;
-+
- TEST_CASE("Curves: cubic b spline fit test", "[Curves]") {
- using namespace Slic3r;
- using namespace Slic3r::Geometry;
-@@ -31,14 +35,11 @@ TEST_CASE("Curves: cubic b spline fit te
-
- auto bspline = fit_cubic_bspline(observations, observation_points, weights, 1);
-
-- Approx ap(1.0f);
-- ap.epsilon(0.1f);
--
- for (int p = 0; p < 200; ++p) {
- float fitted_val = bspline.get_fitted_value(fx(p))(0);
- float expected = fy(p);
-
-- REQUIRE(fitted_val == ap(expected));
-+ REQUIRE_THAT(fitted_val, WithinRel(expected, 0.1f));
-
- }
- }
-@@ -106,13 +107,10 @@ TEST_CASE("Curves: polynomial fit test",
- Vec2f fmin { fx(0), fy(0) };
- Vec2f fmax { fx(200), fy(200) };
-
-- Approx ap(1.0f);
-- ap.epsilon(0.1f);
--
- auto poly = fit_polynomial(observations, observation_points, weights, 2);
-
-- REQUIRE(poly.coefficients(0, 0) == ap(1));
-- REQUIRE(poly.coefficients(0, 1) == ap(-2));
-- REQUIRE(poly.coefficients(0, 2) == ap(1));
-+ REQUIRE_THAT(poly.coefficients(0, 0), WithinRel(1, 0.1f));
-+ REQUIRE_THAT(poly.coefficients(0, 1), WithinRel(-2, 0.1f));
-+ REQUIRE_THAT(poly.coefficients(0, 2), WithinRel(1, 0.1f));
- }
-
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__cut__surface.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__cut__surface.cpp
deleted file mode 100644
index 8b4dbc125d..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__cut__surface.cpp
+++ /dev/null
@@ -1,20 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_cut_surface.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/libslic3r/test_cut_surface.cpp
-@@ -1,10 +1,10 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include <libslic3r/CutSurface.hpp>
- #include <libslic3r/TriangleMesh.hpp> // its_make_cube + its_merge
-
- using namespace Slic3r;
--TEST_CASE("Cut character from surface", "[]")
-+TEST_CASE("Cut character from surface")
- {
- std::string font_path = std::string(TEST_DATA_DIR) +
- "/../../resources/fonts/NotoSans-Regular.ttf";
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__elephant__foot__compensation.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__elephant__foot__compensation.cpp
deleted file mode 100644
index cc38bf4fa5..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__elephant__foot__compensation.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_elephant_foot_compensation.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/libslic3r/test_elephant_foot_compensation.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include <iostream>
- #include <boost/filesystem.hpp>
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__emboss.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__emboss.cpp
index 70d40e46de..dd7ad17181 100644
--- a/prusaslicer/patches/patch-tests_libslic3r_test__emboss.cpp
+++ b/prusaslicer/patches/patch-tests_libslic3r_test__emboss.cpp
@@ -1,19 +1,10 @@
$NetBSD$
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
Patch for new CGAL 6.x based on
https://github.com/prusa3d/PrusaSlicer/pull/13081
---- tests/libslic3r/test_emboss.cpp.orig 2024-12-20 11:54:34.000000000 +0000
+--- tests/libslic3r/test_emboss.cpp.orig 2025-03-10 13:20:54.000000000 +0000
+++ tests/libslic3r/test_emboss.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include <libslic3r/Emboss.hpp>
- #include <libslic3r/SVG.hpp> // only debug visualization
@@ -9,8 +9,16 @@
#include <libslic3r/IntersectionPoints.hpp>
using namespace Slic3r;
@@ -32,24 +23,6 @@ https://github.com/prusa3d/PrusaSlicer/pull/13081
// calculate multiplication of ray dir to intersect - inspired by
// segment_segment_intersection when ray dir is normalized retur distance from
// ray point to intersection No value mean no intersection
-@@ -414,7 +422,7 @@ TEST_CASE("ray segment intersection", "[
- CHECK(abs(*t1 - *t2) < std::numeric_limits<double>::epsilon());
- }
-
--TEST_CASE("triangle intersection", "[]")
-+TEST_CASE("triangle intersection")
- {
- Vec2d point(1, 1);
- Vec2d dir(-1, 0);
-@@ -483,7 +491,7 @@ TEST_CASE("Italic check", "[Emboss]")
- #endif // FONT_DIR_PATH
-
- #include "libslic3r/CutSurface.hpp"
--TEST_CASE("Cut surface", "[]")
-+TEST_CASE("Cut surface")
- {
- std::string font_path = get_font_filepath();
- char letter = '%';
@@ -906,8 +914,8 @@ TEST_CASE("Emboss extrude cut", "[Emboss
// identify glyph for intersected vertex
std::string vert_shape_map_name = "v:glyph_id";
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__expolygon.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__expolygon.cpp
deleted file mode 100644
index 05cfa14c9c..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__expolygon.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_expolygon.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/libslic3r/test_expolygon.cpp
-@@ -1,10 +1,13 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-+#include <catch2/matchers/catch_matchers.hpp>
-+#include <catch2/matchers/catch_matchers_floating_point.hpp>
-
- #include "libslic3r/Point.hpp"
- #include "libslic3r/Polygon.hpp"
- #include "libslic3r/ExPolygon.hpp"
-
- using namespace Slic3r;
-+using Catch::Matchers::WithinRel;
-
- static inline bool points_close(const Point &p1, const Point &p2)
- {
-@@ -30,7 +33,7 @@ SCENARIO("Basics", "[ExPolygon]") {
- REQUIRE(expolygon.is_valid());
- }
- THEN("expolygon area") {
-- REQUIRE(expolygon.area() == Approx(100*100-20*20));
-+ REQUIRE_THAT(expolygon.area(), WithinRel(100.0*100-20*20));
- }
- WHEN("Expolygon scaled") {
- ExPolygon expolygon2 = expolygon;
-@@ -160,4 +163,4 @@ TEST_CASE("Serialization of expolygons t
- }
-
- CHECK(expolys == expolys_loaded);
--}
-\ No newline at end of file
-+}
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__geometry.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__geometry.cpp
deleted file mode 100644
index b7ee4889d6..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__geometry.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_geometry.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/libslic3r/test_geometry.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include "libslic3r/Point.hpp"
- #include "libslic3r/BoundingBox.hpp"
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__hollowing.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__hollowing.cpp
deleted file mode 100644
index deb926a960..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__hollowing.cpp
+++ /dev/null
@@ -1,15 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_hollowing.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/libslic3r/test_hollowing.cpp
-@@ -1,6 +1,6 @@
- #include <iostream>
- #include <fstream>
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include "libslic3r/SLA/Hollowing.hpp"
-
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__indexed__triangle__set.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__indexed__triangle__set.cpp
deleted file mode 100644
index f47891e6e3..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__indexed__triangle__set.cpp
+++ /dev/null
@@ -1,16 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_indexed_triangle_set.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/libslic3r/test_indexed_triangle_set.cpp
-@@ -1,6 +1,7 @@
- #include <iostream>
- #include <fstream>
--#include <catch2/catch.hpp>
-+#include <random>
-+#include <catch2/catch_test_macros.hpp>
-
- #include "libslic3r/TriangleMesh.hpp"
-
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__jump__point__search.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__jump__point__search.cpp
deleted file mode 100644
index 1217a10672..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__jump__point__search.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_jump_point_search.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/libslic3r/test_jump_point_search.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
- #include "libslic3r/BoundingBox.hpp"
- #include "libslic3r/JumpPointSearch.hpp"
-
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__kdtreeindirect.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__kdtreeindirect.cpp
deleted file mode 100644
index 399a395671..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__kdtreeindirect.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_kdtreeindirect.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/libslic3r/test_kdtreeindirect.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include "libslic3r/KDTreeIndirect.hpp"
- #include "libslic3r/Execution/ExecutionSeq.hpp"
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__layer__region.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__layer__region.cpp
deleted file mode 100644
index 896e5c7b59..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__layer__region.cpp
+++ /dev/null
@@ -1,22 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_layer_region.cpp.orig 2024-05-18 04:10:14.661979829 +0000
-+++ tests/libslic3r/test_layer_region.cpp
-@@ -2,11 +2,13 @@
- #include "libslic3r/Geometry.hpp"
- #include "libslic3r/Point.hpp"
- #include "libslic3r/SVG.hpp"
--#include <catch2/catch.hpp>
-+#include <catch2/catch_approx.hpp>
-+#include <catch2/catch_test_macros.hpp>
- #include <libslic3r/LayerRegion.hpp>
-
- using namespace Slic3r;
- using namespace Slic3r::Algorithm;
-+using Catch::Approx;
-
- constexpr bool export_svgs = false;
-
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__line.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__line.cpp
deleted file mode 100644
index 87f2f1def7..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__line.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_line.cpp.orig 2024-04-14 02:09:53.235169800 +0000
-+++ tests/libslic3r/test_line.cpp
-@@ -2,7 +2,8 @@
- * Ported from xs/t/10_line.t
- */
-
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-+#include <catch2/generators/catch_generators.hpp>
- #include <libslic3r/Line.hpp>
- #include "test_utils.hpp"
-
-@@ -37,7 +38,7 @@ TEST_CASE("Parallel lines under angles",
- CHECK(line.parallel_to(line.direction()));
- INFO("Line is parallel to its direction + PI");
- line.parallel_to(line.direction() + M_PI);
-- INFO("line is parallel to its direction - PI")
-+ INFO("line is parallel to its direction - PI");
- line.parallel_to(line.direction() - M_PI);
-
- SECTION("Line is parallel within epsilon") {
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__marchingsquares.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__marchingsquares.cpp
deleted file mode 100644
index a38691aac2..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__marchingsquares.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_marchingsquares.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/libslic3r/test_marchingsquares.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
- #include <test_utils.hpp>
-
- #include <fstream>
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__meshboolean.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__meshboolean.cpp
deleted file mode 100644
index 81450ed51b..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__meshboolean.cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_meshboolean.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/libslic3r/test_meshboolean.cpp
-@@ -1,10 +1,13 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-+#include <catch2/matchers/catch_matchers.hpp>
-+#include <catch2/matchers/catch_matchers_floating_point.hpp>
- #include <test_utils.hpp>
-
- #include <libslic3r/TriangleMesh.hpp>
- #include <libslic3r/MeshBoolean.hpp>
-
- using namespace Slic3r;
-+using Catch::Matchers::WithinRel;
-
- TEST_CASE("CGAL and TriangleMesh conversions", "[MeshBoolean]") {
- TriangleMesh sphere = make_sphere(1.);
-@@ -19,7 +22,7 @@ TEST_CASE("CGAL and TriangleMesh convers
- REQUIRE(M.its.vertices.size() == sphere.its.vertices.size());
- REQUIRE(M.its.indices.size() == sphere.its.indices.size());
-
-- REQUIRE(M.volume() == Approx(sphere.volume()));
-+ REQUIRE_THAT(M.volume(), WithinRel(sphere.volume()));
-
- REQUIRE(! MeshBoolean::cgal::does_self_intersect(M));
- }
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__multiple__beds.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__multiple__beds.cpp
deleted file mode 100644
index 0937ad19ea..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__multiple__beds.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_multiple_beds.cpp.orig 2025-02-17 06:55:16.992196764 +0000
-+++ tests/libslic3r/test_multiple_beds.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include <libslic3r/MultipleBeds.hpp>
- #include <numeric>
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__mutable__polygon.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__mutable__polygon.cpp
deleted file mode 100644
index 810369f2d1..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__mutable__polygon.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_mutable_polygon.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/libslic3r/test_mutable_polygon.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include "libslic3r/Point.hpp"
- #include "libslic3r/MutablePolygon.hpp"
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__mutable__priority__queue.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__mutable__priority__queue.cpp
deleted file mode 100644
index 029dafea8e..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__mutable__priority__queue.cpp
+++ /dev/null
@@ -1,17 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_mutable_priority_queue.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/libslic3r/test_mutable_priority_queue.cpp
-@@ -1,6 +1,8 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
-+#include <algorithm>
- #include <queue>
-+#include <random>
-
- #include "libslic3r/MutablePriorityQueue.hpp"
-
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__optimizers.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__optimizers.cpp
deleted file mode 100644
index f1f3870e03..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__optimizers.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_optimizers.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/libslic3r/test_optimizers.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
- #include <test_utils.hpp>
-
- #include <libslic3r/Optimize/BruteforceOptimizer.hpp>
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__placeholder__parser.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__placeholder__parser.cpp
deleted file mode 100644
index 8bd8d2720b..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__placeholder__parser.cpp
+++ /dev/null
@@ -1,83 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_placeholder_parser.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/libslic3r/test_placeholder_parser.cpp
-@@ -1,9 +1,13 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-+#include <catch2/matchers/catch_matchers.hpp>
-+#include <catch2/matchers/catch_matchers_floating_point.hpp>
-
- #include "libslic3r/PlaceholderParser.hpp"
- #include "libslic3r/PrintConfig.hpp"
-
- using namespace Slic3r;
-+using Catch::Matchers::WithinRel;
-+using Catch::Matchers::WithinAbs;
-
- SCENARIO("Placeholder parser scripting", "[PlaceholderParser]") {
- PlaceholderParser parser;
-@@ -69,17 +73,17 @@ SCENARIO("Placeholder parser scripting",
- SECTION("math: 2*3") { REQUIRE(parser.process("{2*3}") == "6"); }
- SECTION("math: 2*3/6") { REQUIRE(parser.process("{2*3/6}") == "1"); }
- SECTION("math: 2*3/12") { REQUIRE(parser.process("{2*3/12}") == "0"); }
-- SECTION("math: 2.*3/12") { REQUIRE(std::stod(parser.process("{2.*3/12}")) == Approx(0.5)); }
-- SECTION("math: 10 % 2.5") { REQUIRE(std::stod(parser.process("{10%2.5}")) == Approx(0.)); }
-- SECTION("math: 11 % 2.5") { REQUIRE(std::stod(parser.process("{11%2.5}")) == Approx(1.)); }
-+ SECTION("math: 2.*3/12") { REQUIRE_THAT(std::stod(parser.process("{2.*3/12}")), WithinRel(0.5)); }
-+ SECTION("math: 10 % 2.5") { REQUIRE_THAT(std::stod(parser.process("{10%2.5}")), WithinAbs(0., EPSILON)); }
-+ SECTION("math: 11 % 2.5") { REQUIRE_THAT(std::stod(parser.process("{11%2.5}")), WithinRel(1.)); }
- SECTION("math: 2*(3-12)") { REQUIRE(parser.process("{2*(3-12)}") == "-18"); }
- SECTION("math: 2*foo*(3-12)") { REQUIRE(parser.process("{2*foo*(3-12)}") == "0"); }
- SECTION("math: 2*bar*(3-12)") { REQUIRE(parser.process("{2*bar*(3-12)}") == "-36"); }
-- SECTION("math: 2.5*bar*(3-12)") { REQUIRE(std::stod(parser.process("{2.5*bar*(3-12)}")) == Approx(-45)); }
-+ SECTION("math: 2.5*bar*(3-12)") { REQUIRE_THAT(std::stod(parser.process("{2.5*bar*(3-12)}")), WithinRel(-45.0)); }
- SECTION("math: min(12, 14)") { REQUIRE(parser.process("{min(12, 14)}") == "12"); }
- SECTION("math: max(12, 14)") { REQUIRE(parser.process("{max(12, 14)}") == "14"); }
-- SECTION("math: min(13.4, -1238.1)") { REQUIRE(std::stod(parser.process("{min(13.4, -1238.1)}")) == Approx(-1238.1)); }
-- SECTION("math: max(13.4, -1238.1)") { REQUIRE(std::stod(parser.process("{max(13.4, -1238.1)}")) == Approx(13.4)); }
-+ SECTION("math: min(13.4, -1238.1)") { REQUIRE_THAT(std::stod(parser.process("{min(13.4, -1238.1)}")), WithinRel(-1238.1)); }
-+ SECTION("math: max(13.4, -1238.1)") { REQUIRE_THAT(std::stod(parser.process("{max(13.4, -1238.1)}")), WithinRel(13.4)); }
- SECTION("math: int(13.4)") { REQUIRE(parser.process("{int(13.4)}") == "13"); }
- SECTION("math: int(-13.4)") { REQUIRE(parser.process("{int(-13.4)}") == "-13"); }
- SECTION("math: round(13.4)") { REQUIRE(parser.process("{round(13.4)}") == "13"); }
-@@ -101,19 +105,19 @@ SCENARIO("Placeholder parser scripting",
- SECTION("math: ternary3") { REQUIRE(parser.process("{12 == 13 ? 1 - 1 * unknown_symbol : 2 * 2}") == "4"); }
- SECTION("math: ternary4") { REQUIRE(parser.process("{12 == 2 * 6 ? 1 - 1 : 2 * unknown_symbol}") == "0"); }
- SECTION("math: ternary nested") { REQUIRE(parser.process("{12 == 2 * 6 ? 3 - 1 != 2 ? does_not_exist : 0 * 0 - 0 / 1 + 12345 : bull ? 3 - cokoo : 2 * unknown_symbol}") == "12345"); }
-- SECTION("math: interpolate_table(13.84375892476, (0, 0), (20, 20))") { REQUIRE(std::stod(parser.process("{interpolate_table(13.84375892476, (0, 0), (20, 20))}")) == Approx(13.84375892476)); }
-- SECTION("math: interpolate_table(13, (0, 0), (20, 20), (30, 20))") { REQUIRE(std::stod(parser.process("{interpolate_table(13, (0, 0), (20, 20), (30, 20))}")) == Approx(13.)); }
-- SECTION("math: interpolate_table(25, (0, 0), (20, 20), (30, 20))") { REQUIRE(std::stod(parser.process("{interpolate_table(25, (0, 0), (20, 20), (30, 20))}")) == Approx(20.)); }
-+ SECTION("math: interpolate_table(13.84375892476, (0, 0), (20, 20))") { REQUIRE_THAT(std::stod(parser.process("{interpolate_table(13.84375892476, (0, 0), (20, 20))}")), WithinRel(13.84375892476, EPSILON)); }
-+ SECTION("math: interpolate_table(13, (0, 0), (20, 20), (30, 20))") { REQUIRE_THAT(std::stod(parser.process("{interpolate_table(13, (0, 0), (20, 20), (30, 20))}")), WithinRel(13.)); }
-+ SECTION("math: interpolate_table(25, (0, 0), (20, 20), (30, 20))") { REQUIRE_THAT(std::stod(parser.process("{interpolate_table(25, (0, 0), (20, 20), (30, 20))}")), WithinRel(20.)); }
-
- // Test the "coFloatOrPercent" and "xxx_extrusion_width" substitutions.
- // first_layer_extrusion_width ratio_over first_layer_heigth.
-- SECTION("perimeter_extrusion_width") { REQUIRE(std::stod(parser.process("{perimeter_extrusion_width}")) == Approx(0.67500001192092896)); }
-- SECTION("first_layer_extrusion_width") { REQUIRE(std::stod(parser.process("{first_layer_extrusion_width}")) == Approx(0.9)); }
-- SECTION("support_material_xy_spacing") { REQUIRE(std::stod(parser.process("{support_material_xy_spacing}")) == Approx(0.3375)); }
-+ SECTION("perimeter_extrusion_width") { REQUIRE_THAT(std::stod(parser.process("{perimeter_extrusion_width}")), WithinRel(0.67500001192092896, EPSILON)); }
-+ SECTION("first_layer_extrusion_width") { REQUIRE_THAT(std::stod(parser.process("{first_layer_extrusion_width}")), WithinRel(0.9)); }
-+ SECTION("support_material_xy_spacing") { REQUIRE_THAT(std::stod(parser.process("{support_material_xy_spacing}")), WithinRel(0.3375)); }
- // external_perimeter_speed over perimeter_speed
-- SECTION("external_perimeter_speed") { REQUIRE(std::stod(parser.process("{external_perimeter_speed}")) == Approx(30.)); }
-+ SECTION("external_perimeter_speed") { REQUIRE_THAT(std::stod(parser.process("{external_perimeter_speed}")), WithinRel(30.)); }
- // infill_overlap over perimeter_extrusion_width
-- SECTION("infill_overlap") { REQUIRE(std::stod(parser.process("{infill_overlap}")) == Approx(0.16875)); }
-+ SECTION("infill_overlap") { REQUIRE_THAT(std::stod(parser.process("{infill_overlap}")), WithinRel(0.16875)); }
- // If first_layer_speed is set to percent, then it is applied over respective extrusion types by overriding their respective speeds.
- // The PlaceholderParser has no way to know which extrusion type the caller has in mind, therefore it throws.
- SECTION("first_layer_speed") { REQUIRE_THROWS(parser.process("{first_layer_speed}")); }
-@@ -173,7 +177,7 @@ SCENARIO("Placeholder parser scripting",
- DynamicConfig config_outputs;
- config_outputs.set_key_value("writable_floats", new ConfigOptionFloats({ 0., 0., 0. }));
- parser.process("{writable_floats[1] = 33}", 0, nullptr, &config_outputs, nullptr);
-- REQUIRE(config_outputs.opt_float("writable_floats", 1) == Approx(33.));
-+ REQUIRE_THAT(config_outputs.opt_float("writable_floats", 1), WithinRel(33.));
- }
- }
-
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__png__io.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__png__io.cpp
deleted file mode 100644
index 1614fd65fa..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__png__io.cpp
+++ /dev/null
@@ -1,16 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_png_io.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/libslic3r/test_png_io.cpp
-@@ -2,7 +2,7 @@
- #define NOMINMAX
- #endif
-
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include <numeric>
-
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__point.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__point.cpp
deleted file mode 100644
index 9d9c4c5d18..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__point.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_point.cpp.orig 2024-12-20 11:54:34.000000000 +0000
-+++ tests/libslic3r/test_point.cpp
-@@ -5,11 +5,15 @@
- * and cross product uses doubles
- */
-
--#include <catch2/catch.hpp>
-+#include <catch2/catch_approx.hpp>
-+#include <catch2/matchers/catch_matchers.hpp>
-+#include <catch2/matchers/catch_matchers_floating_point.hpp>
-+#include <catch2/catch_test_macros.hpp>
- #include <libslic3r/Point.hpp>
- #include "test_utils.hpp"
-
- using namespace Slic3r;
-+using Catch::Approx;
-
- TEST_CASE("Nearest point", "[Point]") {
- const Point point{10, 15};
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__polygon.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__polygon.cpp
deleted file mode 100644
index f72048b652..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__polygon.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_polygon.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/libslic3r/test_polygon.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include "libslic3r/Point.hpp"
- #include "libslic3r/Polygon.hpp"
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__polyline.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__polyline.cpp
deleted file mode 100644
index 8a95b25974..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__polyline.cpp
+++ /dev/null
@@ -1,16 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_polyline.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/libslic3r/test_polyline.cpp
-@@ -1,7 +1,7 @@
- /**
- * Ported from xs/t/09_polyline.t
- */
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include "libslic3r/Point.hpp"
- #include "libslic3r/Polyline.hpp"
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__quadric__edge__collapse.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__quadric__edge__collapse.cpp
deleted file mode 100644
index 96f42982f1..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__quadric__edge__collapse.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_quadric_edge_collapse.cpp.orig 2024-09-18 13:39:04.000000000 +0000
-+++ tests/libslic3r/test_quadric_edge_collapse.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
- #include <igl/qslim.h>
- #include <test_utils.hpp>
-
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__region__expansion.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__region__expansion.cpp
deleted file mode 100644
index 89f7b68325..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__region__expansion.cpp
+++ /dev/null
@@ -1,63 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_region_expansion.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/libslic3r/test_region_expansion.cpp
-@@ -1,4 +1,6 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-+#include <catch2/matchers/catch_matchers.hpp>
-+#include <catch2/matchers/catch_matchers_floating_point.hpp>
-
- #include <libslic3r/libslic3r.h>
- #include <libslic3r/Algorithm/RegionExpansion.hpp>
-@@ -8,6 +10,7 @@
- #include <libslic3r/SVG.cpp>
-
- using namespace Slic3r;
-+using Catch::Matchers::WithinRel;
-
- //#define DEBUG_TEMP_DIR "d:\\temp\\"
-
-@@ -27,7 +30,7 @@ SCENARIO("Region expansion basics", "[Re
- REQUIRE(expanded.size() == 1);
- }
- THEN("The area of the anchor is 10mm2") {
-- REQUIRE(area(expanded.front()) == Approx(expansion * ten));
-+ REQUIRE_THAT(area(expanded.front()), WithinRel(expansion * ten));
- }
- };
-
-@@ -61,8 +64,8 @@ SCENARIO("Region expansion basics", "[Re
- REQUIRE(expanded.front().size() == 2);
- }
- THEN("The area of each anchor is 10mm2") {
-- REQUIRE(area(expanded.front().front()) == Approx(expansion * ten));
-- REQUIRE(area(expanded.front().back()) == Approx(expansion * ten));
-+ REQUIRE_THAT(area(expanded.front().front()), WithinRel(expansion * ten));
-+ REQUIRE_THAT(area(expanded.front().back()), WithinRel(expansion * ten));
- }
- }
-
-@@ -77,8 +80,8 @@ SCENARIO("Region expansion basics", "[Re
- REQUIRE(expanded.front().size() == 2);
- }
- THEN("The area of each anchor is 100mm2") {
-- REQUIRE(area(expanded.front().front()) == Approx(sqr<double>(ten)));
-- REQUIRE(area(expanded.front().back()) == Approx(sqr<double>(ten)));
-+ REQUIRE_THAT(area(expanded.front().front()), WithinRel(sqr<double>(ten)));
-+ REQUIRE_THAT(area(expanded.front().back()), WithinRel(sqr<double>(ten)));
- }
- }
- }
-@@ -247,7 +250,7 @@ SCENARIO("Region expansion basics", "[Re
- THEN("The anchor expands into a single region with two holes, fully covering the boundary") {
- REQUIRE(expanded.size() == 1);
- REQUIRE(expanded.front().size() == 3);
-- REQUIRE(area(expanded.front()) == Approx(area(boundary)));
-+ REQUIRE_THAT(area(expanded.front()), WithinRel(area(boundary)));
- }
- }
- }
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__static__map.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__static__map.cpp
deleted file mode 100644
index c3c474ef91..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__static__map.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_static_map.cpp.orig 2024-04-14 02:13:14.943711298 +0000
-+++ tests/libslic3r/test_static_map.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
- #include <string_view>
-
- #include "libslic3r/StaticMap.hpp"
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__stl.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__stl.cpp
deleted file mode 100644
index c2b0f4419e..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__stl.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_stl.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/libslic3r/test_stl.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include "libslic3r/Model.hpp"
- #include "libslic3r/Format/STL.hpp"
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__support__spots__generator.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__support__spots__generator.cpp
deleted file mode 100644
index 8da1bad740..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__support__spots__generator.cpp
+++ /dev/null
@@ -1,22 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_support_spots_generator.cpp.orig 2024-04-14 02:13:14.959463307 +0000
-+++ tests/libslic3r/test_support_spots_generator.cpp
-@@ -1,9 +1,13 @@
- #include "libslic3r/Point.hpp"
--#include <catch2/catch.hpp>
-+#include <catch2/catch_approx.hpp>
-+#include <catch2/catch_test_macros.hpp>
-+#include <catch2/matchers/catch_matchers.hpp>
-+#include <catch2/matchers/catch_matchers_floating_point.hpp>
- #include <libslic3r/SupportSpotsGenerator.hpp>
-
- using namespace Slic3r;
- using namespace SupportSpotsGenerator;
-+using Catch::Approx;
-
- namespace Rectangle {
- const float width = 10;
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__surface__mesh.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__surface__mesh.cpp
deleted file mode 100644
index 100250c001..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__surface__mesh.cpp
+++ /dev/null
@@ -1,21 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_surface_mesh.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/libslic3r/test_surface_mesh.cpp
-@@ -1,10 +1,12 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_approx.hpp>
-+#include <catch2/catch_test_macros.hpp>
- #include <test_utils.hpp>
-
-
- #include <libslic3r/SurfaceMesh.hpp>
-
- using namespace Slic3r;
-+using Catch::Approx;
-
-
- // Generate a broken cube mesh. Face 8 is inverted, face 11 is missing.
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__timeutils.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__timeutils.cpp
deleted file mode 100644
index e79b84c5cb..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__timeutils.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_timeutils.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/libslic3r/test_timeutils.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include "libslic3r/Time.hpp"
-
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__triangulation.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__triangulation.cpp
deleted file mode 100644
index 89951038ed..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__triangulation.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_triangulation.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/libslic3r/test_triangulation.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include <libslic3r/Triangulation.hpp>
- #include <libslic3r/SVG.hpp> // only debug visualization
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__utils.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__utils.cpp
deleted file mode 100644
index a9bbd880c5..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__utils.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_utils.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/libslic3r/test_utils.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include "libslic3r/libslic3r.h"
-
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__voronoi.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__voronoi.cpp
deleted file mode 100644
index dc79b1d617..0000000000
--- a/prusaslicer/patches/patch-tests_libslic3r_test__voronoi.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/libslic3r/test_voronoi.cpp.orig 2024-06-21 20:36:12.000000000 +0000
-+++ tests/libslic3r/test_voronoi.cpp
-@@ -1,4 +1,6 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-+#include <catch2/matchers/catch_matchers.hpp>
-+#include <catch2/matchers/catch_matchers_floating_point.hpp>
-
- #include <libslic3r/Polygon.hpp>
- #include <libslic3r/Polyline.hpp>
-@@ -6,6 +8,7 @@
- #include <libslic3r/Geometry/VoronoiOffset.hpp>
-
- #include <numeric>
-+#include <random>
-
- //#define VORONOI_DEBUG_OUT
-
-@@ -21,6 +24,8 @@ using namespace Slic3r;
-
- using VD = Geometry::VoronoiDiagram;
-
-+using Catch::Matchers::WithinRel;
-+
- // https://svn.boost.org/trac10/ticket/12067
- // This bug seems to be confirmed.
- // Vojtech supposes that there may be no Voronoi edges produced for
-@@ -65,7 +70,7 @@ TEST_CASE("Voronoi missing edges - point
- vd, pts, Lines());
- #endif
-
--// REQUIRE(closest_point.z() == Approx(1.));
-+// REQUIRE_THAT(closest_point.z(), WithinRel(1.));
- }
-
- // https://svn.boost.org/trac10/ticket/12707
diff --git a/prusaslicer/patches/patch-tests_sla__print_sla__archive__readwrite__tests.cpp b/prusaslicer/patches/patch-tests_sla__print_sla__archive__readwrite__tests.cpp
deleted file mode 100644
index 1d724ddb2f..0000000000
--- a/prusaslicer/patches/patch-tests_sla__print_sla__archive__readwrite__tests.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/sla_print/sla_archive_readwrite_tests.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/sla_print/sla_archive_readwrite_tests.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
- #include <test_utils.hpp>
-
- #include "libslic3r/SLAPrint.hpp"
diff --git a/prusaslicer/patches/patch-tests_sla__print_sla__print__tests.cpp b/prusaslicer/patches/patch-tests_sla__print_sla__print__tests.cpp
deleted file mode 100644
index db3c459f9e..0000000000
--- a/prusaslicer/patches/patch-tests_sla__print_sla__print__tests.cpp
+++ /dev/null
@@ -1,34 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/sla_print/sla_print_tests.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/sla_print/sla_print_tests.cpp
-@@ -9,6 +9,8 @@
- #include <libslic3r/SLA/SupportTreeMesher.hpp>
- #include <libslic3r/BranchingTree/PointCloud.hpp>
-
-+using Catch::Matchers::WithinRel;
-+
- namespace {
-
- const char *const BELOW_PAD_TEST_OBJECTS[] = {
-@@ -194,8 +196,8 @@ TEST_CASE("InitializedRasterShouldBeNONE
- sla::RasterGrayscaleAAGammaPower raster(res, pixdim, {}, 1.);
- REQUIRE(raster.resolution().width_px == res.width_px);
- REQUIRE(raster.resolution().height_px == res.height_px);
-- REQUIRE(raster.pixel_dimensions().w_mm == Approx(pixdim.w_mm));
-- REQUIRE(raster.pixel_dimensions().h_mm == Approx(pixdim.h_mm));
-+ REQUIRE_THAT(raster.pixel_dimensions().w_mm, WithinRel(pixdim.w_mm));
-+ REQUIRE_THAT(raster.pixel_dimensions().h_mm, WithinRel(pixdim.h_mm));
- }
-
- TEST_CASE("MirroringShouldBeCorrect", "[SLARasterOutput]") {
-@@ -269,5 +271,5 @@ TEST_CASE("Test concurrency")
-
- double s = execution::accumulate(ex_tbb, vals.begin(), vals.end(), 0.);
-
-- REQUIRE(s == Approx(ref));
-+ REQUIRE_THAT(s, WithinRel(ref));
- }
diff --git a/prusaslicer/patches/patch-tests_sla__print_sla__raycast__tests.cpp b/prusaslicer/patches/patch-tests_sla__print_sla__raycast__tests.cpp
deleted file mode 100644
index 9a2ae74acb..0000000000
--- a/prusaslicer/patches/patch-tests_sla__print_sla__raycast__tests.cpp
+++ /dev/null
@@ -1,65 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/sla_print/sla_raycast_tests.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/sla_print/sla_raycast_tests.cpp
-@@ -1,4 +1,6 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-+#include <catch2/matchers/catch_matchers.hpp>
-+#include <catch2/matchers/catch_matchers_floating_point.hpp>
- #include <test_utils.hpp>
-
- #include <libslic3r/AABBMesh.hpp>
-@@ -6,6 +8,8 @@
-
- #include "sla_test_utils.hpp"
-
-+using Catch::Matchers::WithinRel;
-+
- using namespace Slic3r;
-
- // First do a simple test of the hole raycaster.
-@@ -20,8 +24,8 @@ TEST_CASE("Raycaster - find intersection
- s = {-1.f, 0, 5.f};
- dir = {1.f, 0, 0};
- hole.get_intersections(s, dir, out);
-- REQUIRE(out[0].first == Approx(-4.f));
-- REQUIRE(out[1].first == Approx(6.f));
-+ REQUIRE_THAT(out[0].first, WithinRel(-4.f));
-+ REQUIRE_THAT(out[1].first, WithinRel(6.f));
-
- // Start outside and cast parallel to axis.
- s = {0, 0, -1.f};
-@@ -70,25 +74,25 @@ TEST_CASE("Raycaster with loaded drillho
- Vec3d s = center.cast<double>();
- // Fire from center, should hit the interior wall
- auto hit = emesh.query_ray_hit(s, {0, 1., 0.});
-- REQUIRE(hit.distance() == Approx(boxbb.size().x() / 2 - hcfg.min_thickness));
-+ REQUIRE_THAT(hit.distance(), WithinRel(boxbb.size().x() / 2 - hcfg.min_thickness));
-
- // Fire upward from hole center, hit distance equals the radius (hits the
- // side of the hole cut.
- s.y() = hcfg.min_thickness / 2;
- hit = emesh.query_ray_hit(s, {0, 0., 1.});
-- REQUIRE(hit.distance() == Approx(radius));
-+ REQUIRE_THAT(hit.distance(), WithinRel(radius));
-
- // Fire from outside, hit the back side of the cube interior
- s.y() = -1.;
- hit = emesh.query_ray_hit(s, {0, 1., 0.});
-- REQUIRE(hit.distance() == Approx(boxbb.max.y() - hcfg.min_thickness - s.y()));
-+ REQUIRE_THAT(hit.distance(), WithinRel(boxbb.max.y() - hcfg.min_thickness - s.y()));
-
- // Fire downwards from above the hole cylinder. Has to go through the cyl.
- // as it was not there.
- s = center.cast<double>();
- s.z() = boxbb.max.z() - hcfg.min_thickness - 1.;
- hit = emesh.query_ray_hit(s, {0, 0., -1.});
-- REQUIRE(hit.distance() == Approx(s.z() - boxbb.min.z() - hcfg.min_thickness));
-+ REQUIRE_THAT(hit.distance(), WithinRel(s.z() - boxbb.min.z() - hcfg.min_thickness));
-
- // Check for support tree correctness
- test_support_model_collision("20mm_cube.obj", {}, hcfg, holes);
diff --git a/prusaslicer/patches/patch-tests_sla__print_sla__supptgen__tests.cpp b/prusaslicer/patches/patch-tests_sla__print_sla__supptgen__tests.cpp
deleted file mode 100644
index 2114518eb6..0000000000
--- a/prusaslicer/patches/patch-tests_sla__print_sla__supptgen__tests.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/sla_print/sla_supptgen_tests.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/sla_print/sla_supptgen_tests.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
- #include <test_utils.hpp>
-
- #include <libslic3r/ExPolygon.hpp>
diff --git a/prusaslicer/patches/patch-tests_sla__print_sla__supptreeutils__tests.cpp b/prusaslicer/patches/patch-tests_sla__print_sla__supptreeutils__tests.cpp
deleted file mode 100644
index c0acfac3be..0000000000
--- a/prusaslicer/patches/patch-tests_sla__print_sla__supptreeutils__tests.cpp
+++ /dev/null
@@ -1,72 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/sla_print/sla_supptreeutils_tests.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/sla_print/sla_supptreeutils_tests.cpp
-@@ -1,4 +1,6 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-+#include <catch2/matchers/catch_matchers.hpp>
-+#include <catch2/matchers/catch_matchers_floating_point.hpp>
- #include <test_utils.hpp>
-
- #include <unordered_set>
-@@ -7,6 +9,9 @@
- #include "libslic3r/SLA/SupportTreeUtils.hpp"
- #include "libslic3r/SLA/SupportTreeUtilsLegacy.hpp"
-
-+using Catch::Matchers::WithinRel;
-+using Catch::Matchers::WithinAbs;
-+
- // Test pair hash for 'nums' random number pairs.
- template <class I, class II> void test_pairhash()
- {
-@@ -99,7 +104,7 @@ static void eval_ground_conn(const Slic3
- REQUIRE(conn.path.back().r < conn.pillar_base->r_top);
-
- // The end radius and the pillar base's upper radius should match
-- REQUIRE(conn.pillar_base->r_top == Approx(end_r));
-+ REQUIRE_THAT(conn.pillar_base->r_top, WithinRel(end_r));
- }
-
- TEST_CASE("Pillar search dumb case", "[suptreeutils]") {
-@@ -119,7 +124,7 @@ TEST_CASE("Pillar search dumb case", "[s
-
- REQUIRE(conn);
- // REQUIRE(conn.path.size() == 1);
-- REQUIRE(conn.pillar_base->pos.z() == Approx(ground_level(sm)));
-+ REQUIRE_THAT(conn.pillar_base->pos.z(), WithinRel(ground_level(sm)));
- }
-
- SECTION("with zero R source and destination") {
-@@ -134,8 +139,8 @@ TEST_CASE("Pillar search dumb case", "[s
-
- REQUIRE(conn);
- // REQUIRE(conn.path.size() == 1);
-- REQUIRE(conn.pillar_base->pos.z() == Approx(ground_level(sm)));
-- REQUIRE(conn.pillar_base->r_top == Approx(0.));
-+ REQUIRE_THAT(conn.pillar_base->pos.z(), WithinRel(ground_level(sm)));
-+ REQUIRE_THAT(conn.pillar_base->r_top, WithinAbs(0., EPSILON));
- }
-
- SECTION("with zero init direction") {
-@@ -150,7 +155,7 @@ TEST_CASE("Pillar search dumb case", "[s
-
- REQUIRE(conn);
- // REQUIRE(conn.path.size() == 1);
-- REQUIRE(conn.pillar_base->pos.z() == Approx(ground_level(sm)));
-+ REQUIRE_THAT(conn.pillar_base->pos.z(), WithinRel(ground_level(sm)));
- }
- }
-
-@@ -278,7 +283,7 @@ TEST_CASE("Find ground route just above
-
- REQUIRE(conn);
-
-- REQUIRE(conn.pillar_base->pos.z() >= Approx(ground_level(sm)));
-+ REQUIRE(conn.pillar_base->pos.z() >= ground_level(sm));
- }
-
- TEST_CASE("BranchingSupports::MergePointFinder", "[suptreeutils]") {
diff --git a/prusaslicer/patches/patch-tests_sla__print_sla__test__utils.cpp b/prusaslicer/patches/patch-tests_sla__print_sla__test__utils.cpp
deleted file mode 100644
index 05ed2933e2..0000000000
--- a/prusaslicer/patches/patch-tests_sla__print_sla__test__utils.cpp
+++ /dev/null
@@ -1,63 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/sla_print/sla_test_utils.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/sla_print/sla_test_utils.cpp
-@@ -6,6 +6,8 @@
-
- #include <iomanip>
-
-+using Catch::Matchers::WithinRel;
-+
- void test_support_model_collision(
- const std::string &obj_filename,
- const sla::SupportTreeConfig &input_supportcfg,
-@@ -182,7 +184,7 @@ void test_supports(const std::string
- allowed_zmin = zmin - 2 * supportcfg.head_back_radius_mm;
-
- #ifndef NDEBUG
-- if (!(obb.min.z() >= Approx(allowed_zmin)) || !(obb.max.z() <= Approx(zmax)))
-+ if (!(obb.min.z() >= allowed_zmin) || !(obb.max.z() <= zmax))
- {
- indexed_triangle_set its;
- treebuilder.retrieve_full_mesh(its);
-@@ -193,8 +195,8 @@ void test_supports(const std::string
- }
- #endif
-
-- REQUIRE(obb.min.z() >= Approx(allowed_zmin));
-- REQUIRE(obb.max.z() <= Approx(zmax));
-+ REQUIRE(obb.min.z() >= allowed_zmin);
-+ REQUIRE(obb.max.z() <= zmax);
-
- // Move out the support tree into the byproducts, we can examine it further
- // in various tests.
-@@ -240,7 +242,7 @@ void check_support_tree_integrity(const
- };
-
- for (auto &bridge : stree.bridges()) chck_bridge(bridge, max_bridgelen);
-- REQUIRE(max_bridgelen <= Approx(cfg.max_bridge_length_mm));
-+ REQUIRE(max_bridgelen <= cfg.max_bridge_length_mm);
-
- max_bridgelen = 0;
- for (auto &bridge : stree.crossbridges()) chck_bridge(bridge, max_bridgelen);
-@@ -272,7 +274,7 @@ void test_pad(const std::string &obj_fil
- check_validity(out.mesh);
-
- auto bb = out.mesh.bounding_box();
-- REQUIRE(bb.max.z() - bb.min.z() == Approx(padcfg.full_height()));
-+ REQUIRE_THAT(bb.max.z() - bb.min.z(), WithinRel(padcfg.full_height()));
- }
-
- static void _test_concave_hull(const Polygons &hull, const ExPolygons &polys)
-@@ -285,7 +287,7 @@ static void _test_concave_hull(const Pol
- double cchull_area = 0;
- for (const Slic3r::Polygon &p : hull) cchull_area += p.area();
-
-- REQUIRE(cchull_area >= Approx(polys_area));
-+ REQUIRE(cchull_area >= polys_area);
-
- size_t cchull_holes = 0;
- for (const Slic3r::Polygon &p : hull)
diff --git a/prusaslicer/patches/patch-tests_sla__print_sla__test__utils.hpp b/prusaslicer/patches/patch-tests_sla__print_sla__test__utils.hpp
deleted file mode 100644
index 6e6f9651ee..0000000000
--- a/prusaslicer/patches/patch-tests_sla__print_sla__test__utils.hpp
+++ /dev/null
@@ -1,18 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/sla_print/sla_test_utils.hpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/sla_print/sla_test_utils.hpp
-@@ -1,7 +1,9 @@
- #ifndef SLA_TEST_UTILS_HPP
- #define SLA_TEST_UTILS_HPP
-
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-+#include <catch2/matchers/catch_matchers.hpp>
-+#include <catch2/matchers/catch_matchers_floating_point.hpp>
- #include <test_utils.hpp>
-
- // Debug
diff --git a/prusaslicer/patches/patch-tests_sla__print_sla__zcorrection__tests.cpp b/prusaslicer/patches/patch-tests_sla__print_sla__zcorrection__tests.cpp
deleted file mode 100644
index 6665365269..0000000000
--- a/prusaslicer/patches/patch-tests_sla__print_sla__zcorrection__tests.cpp
+++ /dev/null
@@ -1,34 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-
---- tests/sla_print/sla_zcorrection_tests.cpp.orig 2024-06-15 23:48:02.608865326 +0000
-+++ tests/sla_print/sla_zcorrection_tests.cpp
-@@ -1,4 +1,8 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_approx.hpp>
-+#include <catch2/catch_template_test_macros.hpp>
-+#include <catch2/catch_test_macros.hpp>
-+#include <catch2/generators/catch_generators.hpp>
-+#include <catch2/matchers/catch_matchers.hpp>
- #include <test_utils.hpp>
-
- #include <algorithm>
-@@ -64,7 +68,7 @@ TEST_CASE("Testing DepthMap for a cube",
- REQUIRE(dlayer.begin()->first == i);
- double ad = area(dlayer.begin()->second);
- double as = area(slayer);
-- REQUIRE(ad == Approx(as).margin(EPSILON));
-+ REQUIRE(ad == Catch::Approx(as).margin(EPSILON));
- }
- }
-
-@@ -101,7 +105,7 @@ TEST_CASE("Testing DepthMap for arbitrar
- const ExPolygons &slayer = corrslices_fast[i];
- double ad = area(dlayer);
- double as = area(slayer);
-- REQUIRE(ad == Approx(as).margin(EPSILON));
-+ REQUIRE(ad == Catch::Approx(as).margin(EPSILON));
- }
- }
-
diff --git a/prusaslicer/patches/patch-tests_slic3rutils_secretstore__tests.cpp b/prusaslicer/patches/patch-tests_slic3rutils_secretstore__tests.cpp
deleted file mode 100644
index 3751351ce4..0000000000
--- a/prusaslicer/patches/patch-tests_slic3rutils_secretstore__tests.cpp
+++ /dev/null
@@ -1,12 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-
---- tests/slic3rutils/secretstore_tests.cpp.orig 2024-06-16 00:22:38.655124085 +0000
-+++ tests/slic3rutils/secretstore_tests.cpp
-@@ -1,4 +1,4 @@
--#include "catch2/catch.hpp"
-+#include "catch2/catch_test_macros.hpp"
-
- #include "slic3r/Utils/Secrets.hpp"
-
diff --git a/prusaslicer/patches/patch-tests_slic3rutils_slic3r__arrangejob__tests.cpp b/prusaslicer/patches/patch-tests_slic3rutils_slic3r__arrangejob__tests.cpp
deleted file mode 100644
index 1d9e8d5013..0000000000
--- a/prusaslicer/patches/patch-tests_slic3rutils_slic3r__arrangejob__tests.cpp
+++ /dev/null
@@ -1,53 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/slic3rutils/slic3r_arrangejob_tests.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/slic3rutils/slic3r_arrangejob_tests.cpp
-@@ -1,4 +1,6 @@
--#include "catch2/catch.hpp"
-+#include <catch2/catch_template_test_macros.hpp>
-+#include <catch2/matchers/catch_matchers.hpp>
-+#include <catch2/matchers/catch_matchers_floating_point.hpp>
- #include "test_utils.hpp"
-
- #include <random>
-@@ -13,6 +15,8 @@
-
- #include "libslic3r/Format/3mf.hpp"
-
-+using Catch::Matchers::WithinRel;
-+
- class RandomArrangeSettings: public Slic3r::arr2::ArrangeSettingsView {
- Slic3r::arr2::ArrangeSettingsDb::Values m_v;
-
-@@ -143,7 +147,7 @@ TEST_CASE("Basic arrange with cube", "[a
- std::swap(sz.x(), sz.y());
-
- double d_obj = settings.get_distance_from_objects();
-- REQUIRE(sz.y() == Approx(2. * bb1.size().y() + d_obj));
-+ REQUIRE_THAT(sz.y(), WithinRel(2. * bb1.size().y() + d_obj, EPSILON));
- }
-
- SECTION("Selected cube (different object), needs to go beside existing") {
-@@ -177,7 +181,7 @@ TEST_CASE("Basic arrange with cube", "[a
- std::swap(sz.x(), sz.y());
-
- double d_obj = settings.get_distance_from_objects();
-- REQUIRE(sz.y() == Approx(2. * bb1.size().y() + d_obj));
-+ REQUIRE_THAT(sz.y(), WithinRel(2. * bb1.size().y() + d_obj, EPSILON));
- }
-
- SECTION("Four cubes needs to touch each other after arrange") {
-@@ -229,8 +233,8 @@ TEST_CASE("Basic arrange with cube", "[a
- REQUIRE(c == bounding_box(bed).center());
-
- float d_obj = settings.get_distance_from_objects();
-- REQUIRE(pilebb.size().x() == Approx(2. * 20. + d_obj));
-- REQUIRE(pilebb.size().y() == Approx(2. * 20. + d_obj));
-+ REQUIRE_THAT(pilebb.size().x(), WithinRel(2. * 20. + d_obj));
-+ REQUIRE_THAT(pilebb.size().y(), WithinRel(2. * 20. + d_obj));
- }
- }
-
diff --git a/prusaslicer/patches/patch-tests_slic3rutils_slic3r__jobs__tests.cpp b/prusaslicer/patches/patch-tests_slic3rutils_slic3r__jobs__tests.cpp
deleted file mode 100644
index 35f09ad037..0000000000
--- a/prusaslicer/patches/patch-tests_slic3rutils_slic3r__jobs__tests.cpp
+++ /dev/null
@@ -1,14 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/slic3rutils/slic3r_jobs_tests.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/slic3rutils/slic3r_jobs_tests.cpp
-@@ -1,4 +1,5 @@
--#include "catch2/catch.hpp"
-+#include <catch2/catch_template_test_macros.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include <chrono>
- #include <thread>
diff --git a/prusaslicer/patches/patch-tests_slic3rutils_slic3r__version__tests.cpp b/prusaslicer/patches/patch-tests_slic3rutils_slic3r__version__tests.cpp
deleted file mode 100644
index ba6ae8817b..0000000000
--- a/prusaslicer/patches/patch-tests_slic3rutils_slic3r__version__tests.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/slic3rutils/slic3r_version_tests.cpp.orig 2024-02-29 13:03:32.000000000 +0000
-+++ tests/slic3rutils/slic3r_version_tests.cpp
-@@ -1,4 +1,4 @@
--#include "catch2/catch.hpp"
-+#include <catch2/catch_test_macros.hpp>
-
- #include "slic3r/Config/Version.hpp"
-
diff --git a/prusaslicer/patches/patch-tests_thumbnails_test__thumbnails__ini__string.cpp b/prusaslicer/patches/patch-tests_thumbnails_test__thumbnails__ini__string.cpp
deleted file mode 100644
index a27236496c..0000000000
--- a/prusaslicer/patches/patch-tests_thumbnails_test__thumbnails__ini__string.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/thumbnails/test_thumbnails_ini_string.cpp.orig 2024-04-14 02:13:15.056763916 +0000
-+++ tests/thumbnails/test_thumbnails_ini_string.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
-
- #include "libslic3r/Config.hpp"
- #include "libslic3r/PrintConfig.hpp"
diff --git a/prusaslicer/patches/patch-tests_thumbnails_test__thumbnails__input__string.cpp b/prusaslicer/patches/patch-tests_thumbnails_test__thumbnails__input__string.cpp
deleted file mode 100644
index d60eb5b58c..0000000000
--- a/prusaslicer/patches/patch-tests_thumbnails_test__thumbnails__input__string.cpp
+++ /dev/null
@@ -1,20 +0,0 @@
-$NetBSD$
-
-Support Catch2 v3.
-Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
-
---- tests/thumbnails/test_thumbnails_input_string.cpp.orig 2024-04-14 02:13:15.066070658 +0000
-+++ tests/thumbnails/test_thumbnails_input_string.cpp
-@@ -1,4 +1,4 @@
--#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
- #include <test_utils.hpp>
-
- #include <libslic3r/GCode/Thumbnails.hpp>
-@@ -149,4 +149,4 @@ TEST_CASE("Invalid value Thumbnails", "[
- REQUIRE(errors.has(ThumbnailError::InvalidVal));
- REQUIRE(thumbnails.size() == 2);
- }
--}
-\ No newline at end of file
-+}
Home |
Main Index |
Thread Index |
Old Index