prusa3d / PrusaSlicer

G-code generator for 3D printers (RepRap, Makerbot, Ultimaker etc.)
https://www.prusa3d.com/prusaslicer/
GNU Affero General Public License v3.0
7.7k stars 1.93k forks source link

libslic3r "Mutable priority queue - first pop" test failure #8276

Open craftyguy opened 2 years ago

craftyguy commented 2 years ago

Description of the bug

I'm working to package this application on Alpine Linux and this test fails:

❯ /home/clayton/src/aports/testing/prusa-slicer/src/PrusaSlicer-version_2.4.2/build/tests/libslic3r/libslic3r_tests "Mutable priority queue - first pop"
[2022-05-02 11:39:46.025235] [0x00007f9b4015fc20] [trace]   Initializing StaticPrintConfigs
Filters: Mutable priority queue - first pop
Testing Mutable priority queue - first pop

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
libslic3r_tests is a Catch v2.13.6 host application.
Run with -? for options

-------------------------------------------------------------------------------
Mutable priority queue - first pop
-------------------------------------------------------------------------------
/home/clayton/src/aports/testing/prusa-slicer/src/PrusaSlicer-version_2.4.2/tests/libslic3r/test_mutable_priority_queue.cpp:343
...............................................................................

/home/clayton/src/aports/testing/prusa-slicer/src/PrusaSlicer-version_2.4.2/tests/libslic3r/test_mutable_priority_queue.cpp:367: FAILED:
  CHECK( valid )
with expansion:
  false

===============================================================================
test cases: 1 | 1 failed
assertions: 1 | 1 failed

Project file & How to reproduce

Reproducing this requires a system running Alpine Linux (or a container). A preliminary APKBUILD + patches required to build it are located here: https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/33890

It can be used to build/run tests with abuild -r from the directory where the APKBUILD + patches are located.

Checklist of files included above

Version of PrusaSlicer

2.4.2

Operating system

Alpine Linux (edge)

Printer model

n/a

Jony01 commented 2 years ago

Hi @craftyguy, could you please confirm, that this fix helps solve your issue with test: https://github.com/prusa3d/PrusaSlicer/commit/6ab517187fa5f3a8e2b87a59b6a50f26b3a49da6

kk6mrp commented 2 years ago

It still fails for me:

Details ``` 2/5 Test #2: libslic3r_tests ..................***Failed 19.11 sec [2022-05-12 12:44:37.062442] [0x00007fda98ef5760] [trace] Initializing StaticPrintConfigs Testing sort_remove_duplicates Passed in 1.3e-05 [seconds] Testing string_printf Empty format with empty data should return empty string String output length should be the same as input String format should be interpreted as with sprintf String format should survive large input data Passed in 7.4e-05 [seconds] Testing Scenario: Reading 3mf file Given: umlauts in the path of the file When: 3mf model is read Then: load should succeed Passed in 0.001067 [seconds] Testing Scenario: Export+Import geometry to/from 3mf file cycle Given: world vertices coordinates before save When: model is saved+loaded to/from 3mf file Then: world vertices coordinates after load match Passed in 0.021493 [seconds] Testing Scenario: 2D convex hull of sinking object Given: model When: model is rotated, scaled and set as sinking Then: 2D convex hull should match with reference Passed in 0.002775 [seconds] Testing Building a tree over a box, ray caster and closest query Passed in 3.7e-05 [seconds] Testing Scenario: Constant offset Given: 20mm box When: Slic3r::offset() plus 1mm, miter 2x Then: Area is 22^2mm2 Given: 20mm box When: Slic3r::offset() minus 1mm, miter 2x Then: Area is 18^2mm2 Given: 20mm box When: Slic3r::offset() plus 1mm, miter 1.5x Then: Area is 22^2mm2 Given: 20mm box When: Slic3r::offset() minus 1mm, miter 1.5x Then: Area is 18^2mm2 Given: 20mm box When: Slic3r::offset() plus 1mm, miter 1.2x Then: Area is 22^2mm2 Given: 20mm box When: Slic3r::offset() minus 1mm, miter 1.2x Then: Area is 18^2mm2 Given: 20mm box When: Slic3r::variable_offset_outer/inner plus 1mm, miter 2x Then: Area is 22^2mm2 Given: 20mm box When: Slic3r::variable_offset_outer/inner minus 1mm, miter 2x Then: Area is 18^2mm2 Given: 20mm box When: Slic3r::variable_offset_outer/inner plus 1mm, miter 1.5x Then: Area is 22^2mm2 Given: 20mm box When: Slic3r::variable_offset_outer/inner minus 1mm, miter 1.5x Then: Area is 18^2mm2 Given: 20mm box When: Slic3r::variable_offset_outer/inner plus 1mm, miter 1.2x Then: Area is 22^2mm2 Given: 20mm box When: Slic3r::variable_offset_outer/inner minus 1mm, miter 1.2x Then: Area is 18^2mm2 Given: 20mm box with 10mm hole Slic3r::offset() miter 2x When: plus 1mm Then: Area is 22^2-8^2 mm2 Given: 20mm box with 10mm hole Slic3r::offset() miter 2x When: minus 1mm Then: Area is 18^2-12^2 mm2 Given: 20mm box with 10mm hole Slic3r::offset() miter 1.5x When: plus 1mm Then: Area is 22^2-8^2 mm2 Given: 20mm box with 10mm hole Slic3r::offset() miter 1.5x When: minus 1mm Then: Area is 18^2-12^2 mm2 Given: 20mm box with 10mm hole Slic3r::offset() miter 1.2x When: plus 1mm Then: Area is 22^2-8^2 mm2 Given: 20mm box with 10mm hole Slic3r::offset() miter 1.2x When: minus 1mm Then: Area is 18^2-12^2 mm2 Given: 20mm box with 10mm hole Slic3r::variable_offset_outer() miter 2x When: plus 1mm Then: Area is 22^2-8^2 mm2 Given: 20mm box with 10mm hole Slic3r::variable_offset_outer() miter 2x When: minus 1mm Then: Area is 18^2-12^2 mm2 Given: 20mm box with 10mm hole Slic3r::variable_offset_outer() miter 1.5x When: plus 1mm Then: Area is 22^2-8^2 mm2 Given: 20mm box with 10mm hole Slic3r::variable_offset_outer() miter 1.5x When: minus 1mm Then: Area is 18^2-12^2 mm2 Given: 20mm box with 10mm hole Slic3r::variable_offset_outer() miter 1.2x When: plus 1mm Then: Area is 22^2-8^2 mm2 Given: 20mm box with 10mm hole Slic3r::variable_offset_outer() miter 1.2x When: minus 1mm Then: Area is 18^2-12^2 mm2 Given: 20mm right angle triangle Slic3r::offset() Outer offset 1mm, miter 2x Then: Area matches Given: 20mm right angle triangle Slic3r::offset() Outer offset 1mm, miter 1.5x Then: Area matches Given: 20mm right angle triangle Slic3r::offset() Outer offset 1mm, miter 1.2x Then: Area matches Given: 20mm right angle triangle Slic3r::variable_offset_outer() Outer offset 1mm, miter 2x Then: Area matches Given: 20mm right angle triangle Slic3r::variable_offset_outer() Outer offset 1mm, miter 1.5x Then: Area matches Given: 20mm right angle triangle Slic3r::variable_offset_outer() Outer offset 1mm, miter 1.2x Then: Area matches Passed in 0.00482 [seconds] Testing Scenario: Various Clipper operations - xs/t/11_clipper.t Given: square_with_hole When: offset Then: offset matches Given: square_with_hole When: offset_ex Then: offset matches Given: square_with_hole When: offset2_ex Then: offset matches Given: square_with_hole 2 When: offset2_ex Then: offset matches Given: square and hole When: diff_ex Then: hole is created Given: polyline When: intersection_pl Then: correct number of result lines Given: polyline When: intersection_pl Then: result lines have correct length Given: polyline When: diff_pl Then: correct number of result lines Given: polyline When: diff_pl Then: the left result line has correct length Given: polyline When: diff_pl Then: the right result line has correct length Given: polyline When: diff_pl Then: the central result line has correct length Given: Clipper bug #96 / Slic3r issue #2028 Then: intersection_pl - result is not empty Given: Clipper bug #122 Then: intersection_pl - result is not empty Given: Clipper bug #126 Then: intersection_pl - result is not empty Given: Clipper bug #126 Then: intersection_pl - result has same length as subject polyline Passed in 0.001296 [seconds] Testing Scenario: Various Clipper operations - t/clipper.t Given: square with hole When: intersection_ex with another square Then: intersection area matches (hole is preserved) Given: square with hole 2 When: union_ex with another square Then: union of two ccw and one cw is a contour with no holes Given: square with hole 2 When: diff_ex with another square Then: difference of a cw from two ccw is a contour with one hole Given: yet another square When: no-op diff_pl Then: returns the right number of polylines Given: yet another square When: no-op diff_pl Then: returns the unmodified input polyline Passed in 0.000349 [seconds] Testing Traversing Clipper PolyTree Traverse into Polygons WITHOUT spatial ordering Traverse into ExPolygons WITHOUT spatial ordering Traverse into Polygons WITH spatial ordering Traverse into ExPolygons WITH spatial ordering Passed in 0.000189 [seconds] Testing Scenario: Generic config validation performs as expected. Given: A config generated from default options When: perimeter_extrusion_width is set to 250%, a valid value Then: The config is read as valid. Given: A config generated from default options When: perimeter_extrusion_width is set to -10, an invalid value Then: Validate returns error Given: A config generated from default options When: perimeters is set to -10, an invalid value Then: Validate returns error Passed in 0.003363 [seconds] Testing Scenario: Config accessor functions perform as expected. Given: A config generated from default options When: A boolean option is set to a boolean value Then: The underlying value is set correctly. Given: A config generated from default options When: A boolean option is set to a string value representing a 0 or 1 Then: The underlying value is set correctly. Given: A config generated from default options When: A boolean option is set to a string value representing something other than 0 or 1 Then: A BadOptionTypeException exception is thrown. Given: A config generated from default options When: A boolean option is set to a string value representing something other than 0 or 1 And: Value is unchanged. Given: A config generated from default options When: A boolean option is set to an int value Then: A BadOptionTypeException exception is thrown. Given: A config generated from default options When: A numeric option is set from serialized string Then: The underlying value is set correctly. Given: A config generated from default options When: An floating-point option is set through the integer interface Then: The underlying value is set correctly. Given: A config generated from default options When: A floating-point option is set through the double interface Then: The underlying value is set correctly. Given: A config generated from default options When: An integer-based option is set through the double interface Then: A BadOptionTypeException exception is thrown. Given: A config generated from default options When: A numeric option is set to a non-numeric value. Then: A BadOptionTypeException exception is thown. Given: A config generated from default options When: A numeric option is set to a non-numeric value. Then: The value does not change. Given: A config generated from default options When: A string option is set through the string interface Then: The underlying value is set correctly. Given: A config generated from default options When: A string option is set through the integer interface Then: The underlying value is set correctly. Given: A config generated from default options When: A string option is set through the double interface Then: The underlying value is set correctly. Given: A config generated from default options When: A float or percent is set as a percent through the string interface. Then: Value and percent flag are 100/true Given: A config generated from default options When: A float or percent is set as a float through the string interface. Then: Value and percent flag are 100/false Given: A config generated from default options When: A float or percent is set as a float through the int interface. Then: Value and percent flag are 100/false Given: A config generated from default options When: A float or percent is set as a float through the double interface. Then: Value and percent flag are 100.5/false Given: A config generated from default options When: An invalid option is requested during set. Then: A BadOptionTypeException exception is thrown. Given: A config generated from default options When: An invalid option is requested during get. Then: A UnknownOptionException exception is thrown. Given: A config generated from default options When: An invalid option is requested during opt. Then: A UnknownOptionException exception is thrown. Given: A config generated from default options When: getX called on an unset option. Then: The default is returned. Given: A config generated from default options When: getFloat called on an option that has been set. Then: The set value is returned. Passed in 0.105803 [seconds] Testing Scenario: Config ini load/save interface When: new_from_ini is called Then: Config object contains ini file options. Passed in 0.000131 [seconds] Testing Scenario: DynamicPrintConfig serialization When: DynamicPrintConfig is serialized and deserialized Then: Config object contains ini file options. Passed in 0.001437 [seconds] Testing Scenario: Elephant foot compensation Given: Contour with hole When: Compensated Then: area of the compensated polygon is smaller Given: Tiny contour When: Compensated Then: Tiny contour is not compensated Given: Large box When: Compensated Then: area of the compensated polygon is smaller Given: Thin ring (GH issue #2085) When: Compensated Then: area of the compensated polygon is smaller Given: Rectangle with a narrow part sticking out When: Partially compensated Then: area of the compensated polygon is smaller Given: Rectangle with a narrow part sticking out When: Fully compensated Then: area of the compensated polygon is smaller Given: Box with hole close to wall (GH issue #2998) When: Compensated Then: area of the compensated polygon is smaller Given: Spirograph wheel When: Partially compensated Then: area of the compensated polygon is smaller Given: Spirograph wheel When: Fully compensated Then: area of the compensated polygon is smaller Given: Spirograph wheel When: Brutally compensated Then: area of the compensated polygon is smaller Given: Vase with fins When: Compensated Then: area of the compensated polygon is smaller Passed in 0.079857 [seconds] Testing Line::parallel_to Passed in 1.4e-05 [seconds] Testing Line::perpendicular_to Passed in 1.2e-05 [seconds] Testing Polygon::contains works properly Passed in 1.1e-05 [seconds] Testing Scenario: Intersections of line segments Given: Integer coordinates Then: The intersection is valid Given: Scaled coordinates Then: There is still an intersection Passed in 4.3e-05 [seconds] Testing Scenario: polygon_is_convex works Given: A square of dimension 10 When: Polygon is convex clockwise Then: it is not convex Given: A square of dimension 10 When: Polygon is convex counter-clockwise Then: it is convex Given: A concave polygon Then: It is not convex Passed in 8e-05 [seconds] Testing Creating a polyline generates the obvious lines Passed in 1.2e-05 [seconds] Testing Splitting a Polygon generates a polyline correctly Passed in 1.2e-05 [seconds] Testing Bounding boxes are scaled appropriately Passed in 1.1e-05 [seconds] Testing Offseting a line generates a polygon correctly Passed in 3.7e-05 [seconds] Testing Scenario: Circle Fit, TaubinFit with Newton's method Given: A vector of Vec2ds arranged in a half-circle with approximately the same distance R from some point When: Circle fit is called on the entire array Then: A center point of -6,0 is returned. Given: A vector of Vec2ds arranged in a half-circle with approximately the same distance R from some point When: Circle fit is called on the first four points Then: A center point of -6,0 is returned. Given: A vector of Vec2ds arranged in a half-circle with approximately the same distance R from some point When: Circle fit is called on the middle four points Then: A center point of -6,0 is returned. Given: A vector of Vec2ds arranged in a half-circle with approximately the same distance R from some point When: Circle fit is called on the entire array Then: A center point of 3,9 is returned. Given: A vector of Vec2ds arranged in a half-circle with approximately the same distance R from some point When: Circle fit is called on the first four points Then: A center point of 3,9 is returned. Given: A vector of Vec2ds arranged in a half-circle with approximately the same distance R from some point When: Circle fit is called on the middle four points Then: A center point of 3,9 is returned. Given: A vector of Points arranged in a half-circle with approximately the same distance R from some point When: Circle fit is called on the entire array Then: A center point of scaled 3,9 is returned. Given: A vector of Points arranged in a half-circle with approximately the same distance R from some point When: Circle fit is called on the first four points Then: A center point of scaled 3,9 is returned. Given: A vector of Points arranged in a half-circle with approximately the same distance R from some point When: Circle fit is called on the middle four points Then: A center point of scaled 3,9 is returned. Passed in 0.000317 [seconds] Testing smallest_enclosing_circle_welzl Passed in 1.3e-05 [seconds] Testing Scenario: Path chaining Given: A path Then: Chained with no diagonals (thus 26 units long) Given: Gyroid infill end points Then: Chained taking the shortest path Given: Loop pieces Then: Connected without a gap Passed in 0.002879 [seconds] Testing Scenario: Line distances Given: A line Then: Points on the line segment have 0 distance Given: A line Then: Points off the line have the appropriate distance Passed in 4.6e-05 [seconds] Testing Scenario: Polygon convex/concave detection Given: A Square with dimension 100 Then: It has 4 convex points counterclockwise Given: A Square with dimension 100 Then: It has 4 concave points clockwise Given: A Square with an extra colinearvertex Then: It has 4 convex points counterclockwise Given: A Square with an extra collinear vertex in different order Then: It has 4 convex points counterclockwise Given: A triangle Then: it has three convex vertices Given: A triangle with an extra collinear point Then: it has three convex vertices Given: A polygon with concave vertices with angles of specifically 4/3pi Then: the correct number of points are detected Passed in 0.000204 [seconds] Testing Triangle Simplification does not result in less than 3 points Passed in 2.5e-05 [seconds] Testing Scenario: Ported from xs/t/14_geometry.t Given: square convex hull returns the correct number of points arrange returns expected number of positions directions_parallel Passed in 6.4e-05 [seconds] Testing Convex polygon intersection on two disjoint squares Passed in 1.4e-05 [seconds] Testing Convex polygon intersection on two intersecting squares Passed in 1.3e-05 [seconds] Testing Convex polygon intersection on two squares touching one edge Passed in 1.2e-05 [seconds] Testing Convex polygon intersection on two squares touching one vertex Passed in 8.6e-05 [seconds] Testing Convex polygon intersection on two overlapping squares Passed in 1.3e-05 [seconds] Testing Convex polygon intersection test prusa polygons Passed in 0.013237 [seconds] Testing Scenario: Placeholder parser scripting nested config options (legacy syntax) array reference whitespaces and newlines are maintained math: 2*3 math: 2*3/6 math: 2*3/12 math: 2.*3/12 math: 10 % 2.5 math: 11 % 2.5 math: 2*(3-12) math: 2*foo*(3-12) math: 2*bar*(3-12) math: 2.5*bar*(3-12) math: min(12, 14) math: max(12, 14) math: min(13.4, -1238.1) math: max(13.4, -1238.1) math: int(13.4) math: int(-13.4) math: round(13.4) math: round(-13.4) math: round(13.6) math: round(-13.6) math: digits(5, 15) math: digits(5., 15) math: zdigits(5, 15) math: zdigits(5., 15) math: digits(5, 15, 8) math: digits(5., 15, 8) math: zdigits(5, 15, 8) math: zdigits(5., 15, 8) math: digits(13.84375892476, 15, 8) math: zdigits(13.84375892476, 15, 8) perimeter_extrusion_width first_layer_extrusion_width support_material_xy_spacing external_perimeter_speed infill_overlap first_layer_speed boolean expression parser: 12 == 12 boolean expression parser: 12 != 12 boolean expression parser: regex matches boolean expression parser: regex does not match boolean expression parser: accessing variables, equal boolean expression parser: accessing variables, not equal boolean expression parser: (12 == 12) and (13 != 14) boolean expression parser: (12 == 12) && (13 != 14) boolean expression parser: (12 == 12) or (13 == 14) boolean expression parser: (12 == 12) || (13 == 14) boolean expression parser: (12 == 12) and not (13 == 14) boolean expression parser: ternary true boolean expression parser: ternary false boolean expression parser: ternary false 2 boolean expression parser: ternary true 2 boolean expression parser: lower than - false boolean expression parser: lower than - true boolean expression parser: greater than - true boolean expression parser: greater than - false boolean expression parser: lower than or equal- false boolean expression parser: lower than or equal - true boolean expression parser: greater than or equal - true boolean expression parser: greater than or equal - false boolean expression parser: lower than or equal (same values) - true boolean expression parser: greater than or equal (same values) - true complex expression complex expression2 complex expression3 Passed in 0.03482 [seconds] Testing Scenario: Converted Perl tests Given: ccw_square Then: ccw_square is valid Given: ccw_square Then: cw_square is valid Given: ccw_square Then: ccw_square.area Given: ccw_square Then: cw_square.area Given: ccw_square Then: ccw_square.centroid Given: ccw_square Then: cw_square.centroid Given: ccw_square Then: ccw_square.contains_point(150, 150) Given: ccw_square Then: cw_square.contains_point(150, 150) Given: ccw_square Then: conversion to lines Given: ccw_square Then: split_at_first_point Given: ccw_square Then: split_at_index(2) Given: ccw_square Then: split_at_vertex(ccw_square[2]) Given: ccw_square Then: is_counter_clockwise Given: ccw_square Then: ! is_counter_clockwise Given: ccw_square Then: make_counter_clockwise Given: ccw_square Then: make_counter_clockwise^2 Given: ccw_square Then: first_point Given: Triangulating hexagon Then: right number of triangles Given: Triangulating hexagon Then: all triangles are ccw Given: General triangle Then: Intersection with line Passed in 0.000854 [seconds] Testing Centroid of Trapezoid must be inside Passed in 1e-05 [seconds] Testing Scenario: Remove collinear points from Polygon Given: Polygon with collinear points When: collinear points are removed Then: Leading collinear points are removed Given: Polygon with collinear points When: collinear points are removed Then: Trailing collinear points are removed Given: Polygon with collinear points When: collinear points are removed Then: Number of remaining points is correct Passed in 0.000111 [seconds] Testing Scenario: Iterators Given: Polygon with three points When: Iterating upwards Then: ++ it is not equal to begin Given: Polygon with three points When: Iterating upwards Then: ++ it is not equal to end Given: Polygon with three points When: Iterating upwards Then: ++ (++ it) is not equal to begin Given: Polygon with three points When: Iterating upwards Then: ++ (++ it) is equal to end Given: Polygon with three points When: Iterating upwards Then: ++ (++ (++ it)) is equal to begin Given: Polygon with three points When: Iterating upwards Then: ++ (++ (++ it)) is not equal to end Given: Polygon with three points When: Iterating downwards Then: -- it is not equal to begin Given: Polygon with three points When: Iterating downwards Then: -- it is equal to end Given: Polygon with three points When: Iterating downwards Then: -- (-- it) is not equal to begin Given: Polygon with three points When: Iterating downwards Then: -- (-- it) is not equal to end Given: Polygon with three points When: Iterating downwards Then: -- (-- (-- it)) is equal to begin Given: Polygon with three points When: Iterating downwards Then: -- (-- (-- it)) is not equal to end Given: Polygon with three points When: Deleting 1st point Then: Size is 2 Given: Polygon with three points When: Deleting 1st point Then: p.begin().remove() == it_2nd Given: Polygon with three points When: Deleting 1st point Then: it_2nd == new begin() Given: Polygon with three points When: Deleting 2nd point Then: Size is 2 Given: Polygon with three points When: Deleting 2nd point Then: it_2nd.remove() == it_3rd Given: Polygon with three points When: Deleting 2nd point Then: it_1st == new begin() Given: Polygon with three points When: Deleting two points Then: Size is 1 Given: Polygon with three points When: Deleting two points Then: p.begin().next() == p.begin() Given: Polygon with three points When: Deleting two points Then: p.begin().prev() == p.begin() Given: Polygon with three points When: Deleting all points Then: Size is 0 Given: Polygon with three points When: Deleting all points Then: ! p.begin().valid() Given: Polygon with three points When: Deleting all points Then: last iterator not valid Given: Polygon with three points When: Inserting a point at the beginning Then: Polygon content is ok Given: Polygon with three points When: Inserting a point at the 2nd position Then: Polygon content is ok Given: Polygon with three points When: Inserting a point after a point was removed Then: Initial capacity is 3 Given: Polygon with three points When: Inserting a point after a point was removed Then: After removal of the 1st point the capacity is still 3 Given: Polygon with three points When: Inserting a point after a point was removed Then: After removal of the 1st point the content is ok Given: Polygon with three points When: Inserting a point after a point was removed Then: After insertion at head position the polygon content is ok Given: Polygon with three points When: Inserting a point after a point was removed Then: and the capacity is still 3 Passed in 0.001492 [seconds] Testing Scenario: Remove degenerate points from MutablePolygon Given: Polygon with duplicate points When: Duplicate points are removed Then: Polygon content is ok Passed in 3.1e-05 [seconds] Testing Scenario: smooth_outward Given: Convex polygon When: smooth_outward Then: Polygon is unmodified Given: Sharp tiny concave polygon (hole) When: smooth_outward Then: Hole is closed Given: Two polygons When: smooth_outward Then: CCW contour unmodified, CW contour removed. Passed in 0.000102 [seconds] Testing Skip addressing block root block leaf Obtaining child Obtaining parent Passed in 5.8e-05 [seconds] Testing Mutable priority queue - basic tests a default constructed queue is empty an empty queue is not empty when one element is inserted a queue with one element has it on top a queue with one element becomes empty when popped insert sorted stays sorted randomly inserted elements are popped sorted Passed in 0.019997 [seconds] Testing Mutable priority queue - reshedule first reschedule top with highest prio leaves order unchanged reschedule to mid range moves element to correct place reschedule to last moves element to correct place reschedule top of 2 elements to last reschedule top of 3 elements left to 2nd reschedule top of 3 elements right to 2nd reschedule top random gives same resultas pop/push Passed in 0.00433 [seconds] Testing Mutable priority queue - first pop ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ libslic3r_tests is a Catch v2.13.6 host application. Run with -? for options ------------------------------------------------------------------------------- Mutable priority queue - first pop ------------------------------------------------------------------------------- /home/weston/dev/aports/testing/prusa-slicer/src/PrusaSlicer-version_2.4.2/tests/libslic3r/test_mutable_priority_queue.cpp:343 ............................................................................... /home/weston/dev/aports/testing/prusa-slicer/src/PrusaSlicer-version_2.4.2/tests/libslic3r/test_mutable_priority_queue.cpp:365: FAILED: CHECK( it.id != 0 ) with expansion: 0 != 0 /home/weston/dev/aports/testing/prusa-slicer/src/PrusaSlicer-version_2.4.2/tests/libslic3r/test_mutable_priority_queue.cpp:367: FAILED: CHECK( idxs[0] != std::numeric_limits::max() ) with expansion: 18446744073709551615 (0xffffffffffffffff) != 18446744073709551615 (0xffffffffffffffff) Testing Mutable priority queue complex Passed in 0.051555 [seconds] Testing Scenario: Reading an STL file Given: umlauts in the path of a binary STL file, Czech characters in the file name When: STL file is read Then: load should succeed Given: in ASCII format When: line endings LF Then: load should succeed Given: in ASCII format When: line endings CRLF Then: load should succeed Given: in ASCII format When: nonstandard STL file (text after ending tags, invalid normals, for example infinities) Then: load should succeed Passed in 0.009364 [seconds] Testing CGAL and TriangleMesh conversions Passed in 1.89997 [seconds] Testing Empty raster should result in empty polygons Passed in 1.6e-05 [seconds] Testing Marching squares directions Passed in 1.2e-05 [seconds] Testing Fully covered raster should result in a rectangle Full accuracy Half accuracy Passed in 0.000847 [seconds] Testing 4x4 raster with one ring Passed in 0.000209 [seconds] Testing 4x4 raster with two rings Ambiguous case with 'ac' square Ambiguous case with 'bd' square Passed in 0.000857 [seconds] Testing Square with hole in the middle Proportional raster, 1x1 mm pixel size, full accuracy Proportional raster, 1x1 mm pixel size, half accuracy Landscape raster, 1x1 mm pixel size, full accuracy Landscape raster, 1x1 mm pixel size, half accuracy Portrait raster, 1x1 mm pixel size, full accuracy Portrait raster, 1x1 mm pixel size, half accuracy Proportional raster, 2x2 mm pixel size, full accuracy Proportional raster, 2x2 mm pixel size, half accuracy Proportional raster, 0.5x0.5 mm pixel size, full accuracy Proportional raster, 0.5x0.5 mm pixel size, half accuracy Passed in 0.024781 [seconds] Testing Circle with hole in the middle Passed in 0.081962 [seconds] Testing Recreate object from rasters 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 Passed in 12.9377 [seconds] Testing ISO8601Z Passed in 4.6e-05 [seconds] Testing Slic3r_UTC_Time_Format Passed in 2.7e-05 [seconds] Testing Voronoi missing edges - points 12067 Passed in 4.7e-05 [seconds] Testing Voronoi missing edges - Alessandro gapfill 12707 Passed in 0.000117 [seconds] Testing Voronoi weirdness Passed in 5.2e-05 [seconds] Testing Voronoi division by zero 12903 Passed in 3.8e-05 [seconds] Testing Voronoi offset Passed in 0.000277 [seconds] Testing Voronoi offset 2 Passed in 0.001234 [seconds] Testing Voronoi offset 3 Passed in 0.002762 [seconds] Testing Voronoi offset with edge collapse Passed in 0.034842 [seconds] Testing Voronoi offset 5 Passed in 0.004051 [seconds] Testing Voronoi skeleton Passed in 0.000296 [seconds] Testing Voronoi missing vertex 1 Passed in 9.7e-05 [seconds] Testing Voronoi missing vertex 2 Passed in 0.000154 [seconds] Testing Voronoi missing vertex 3 Passed in 0.000254 [seconds] Testing Duplicate Voronoi vertices Passed in 0.000115 [seconds] Testing Intersecting Voronoi edges Passed in 7.9e-05 [seconds] Testing Test brute force optimzer for basic 1D and 2D functions Passed in 0.000131 [seconds] Testing PNG read Correct png buffer should be recognized as such. Fake png buffer should be recognized as such. Decoded PNG buffer resolution should match the original Passed in 0.00075 [seconds] Testing Split empty mesh Passed in 1.3e-05 [seconds] Testing Split simple mesh consisting of one part Passed in 3.1e-05 [seconds] Testing Split two non-watertight mesh Passed in 0.000155 [seconds] Testing Split non-manifold mesh Passed in 0.00013 [seconds] Testing Split two watertight meshes Passed in 0.10163 [seconds] Testing Reduce one edge by Quadric Edge Collapse Passed in 6.3e-05 [seconds] Testing Simplify mesh by Quadric edge collapse to 5% Passed in 0.213256 [seconds] Testing Simplify trouble case Passed in 0.000186 [seconds] Testing Simplified cube should not be empty. Passed in 5.2e-05 [seconds] Testing Hollow two overlapping spheres Passed in 3.55225 [seconds] =============================================================================== test cases: 88 | 87 passed | 1 failed assertions: 48233 | 48231 passed | 2 failed Start 3: slic3rutils_tests 3/5 Test #3: slic3rutils_tests ................ Passed 0.02 sec Start 4: fff_print_tests 4/5 Test #4: fff_print_tests .................. Passed 6.93 sec Start 5: sla_print_tests 5/5 Test #5: sla_print_tests .................. Passed 63.90 sec 80% tests passed, 1 tests failed out of 5 Total Test time (real) = 90.43 sec The following tests FAILED: 2 - libslic3r_tests (Failed) Errors while running CTest ```

Also, looks like the same issue here: https://github.com/void-linux/void-packages/pull/35105

craftyguy commented 2 years ago

and just in case there's some more context that might be useful, here's the test failure in the Alpine Linux CI:

https://gitlab.alpinelinux.org/craftyguy/aports/-/jobs/719734#L4981

kk6mrp commented 2 years ago

There are no test failures with patches to boost. Refer to https://github.com/prusa3d/PrusaSlicer/pull/6849#issuecomment-1125598262

Boost 1.77 needs the following patches for Prusa Slicer to compile correctly: https://github.com/boostorg/math/commit/3d3d2d7467cf9e0e8dc3220cf1a2badb321df099.patch https://github.com/boostorg/geometry/commit/5110ec7daea0fef72ebdbd41c7f3392502c55945.patch https://github.com/boostorg/geometry/commit/3dbd2247b63613f68ed4feebb5f5ba390d021b39.patch

craftyguy commented 2 years ago

@kk6mrp hmm, the test is still failing even with the patches to boost: https://gitlab.alpinelinux.org/craftyguy/aports/-/jobs/720012#L1911

so I'm curious how/why it passed for you 😄

kk6mrp commented 2 years ago

@craftyguy I have no idea, I built it successfully three or four times and then I've got the same issue as you now.

craftyguy commented 2 years ago

@Jony01 so I think it's fairly safe to say at this point that your patch doesn't resolve the failure for us. Is there anything I can collect to help?

bubnikv commented 2 years ago

@craftyguy would you please test the current master?

I hope I have fixed the unit tests with 15a082b80b1d9ed3cfa70d3d8133c4cd1e5d699d f5ec76c2300095f23af6be9d37488b7f434df25d

craftyguy commented 2 years ago

I'm having some unrelated issues trying to build master.. and it looks like those patches are not trivial (to someone unfamiliar with the codebase) to backport to the 2.4.x stable branch, which is what I've been trying to package all along. Any chance these patches could be backported to the latest stable release?

kk6mrp commented 2 years ago

@bubnikv I can build on the latest master but some of the tests are still failing:

Test project /home/weston/dev/aports/testing/prusa-slicer/src/PrusaSlicer-master/build
    Start 1: libnest2d_tests
1/5 Test #1: libnest2d_tests ..................   Passed    0.54 sec
    Start 2: libslic3r_tests
2/5 Test #2: libslic3r_tests ..................Subprocess aborted***Exception:   0.07 sec
[2022-07-27 23:52:18.468394] [0x00007fa796a75be0] [trace]   Initializing StaticPrintConfigs
Assertion failed: scaling_factor.x() > 0.0 && scaling_factor.y() > 0.0 && scaling_factor.z() > 0.0 (/home/weston/dev/aports/testing/prusa-slicer/src/PrusaSlicer-master/src/libslic3r/Geometry.cpp: set_scaling_factor: 555)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
libslic3r_tests is a Catch v2.13.6 host application.
Run with -? for options

-------------------------------------------------------------------------------
Scenario: Export+Import geometry to/from 3mf file cycle
      Given: world vertices coordinates before save
-------------------------------------------------------------------------------
/home/weston/dev/aports/testing/prusa-slicer/src/PrusaSlicer-master/tests/libslic3r/test_3mf.cpp:27
...............................................................................

/home/weston/dev/aports/testing/prusa-slicer/src/PrusaSlicer-master/tests/libslic3r/test_3mf.cpp:27: FAILED:
due to a fatal error condition:
  SIGABRT - Abort (abnormal termination) signal

===============================================================================
test cases: 4 | 3 passed | 1 failed
assertions: 7 | 6 passed | 1 failed

    Start 3: slic3rutils_tests
3/5 Test #3: slic3rutils_tests ................   Passed    2.55 sec
    Start 4: fff_print_tests
4/5 Test #4: fff_print_tests ..................   Passed   40.02 sec
    Start 5: sla_print_tests
5/5 Test #5: sla_print_tests ..................   Passed   63.78 sec

80% tests passed, 1 tests failed out of 5

Total Test time (real) = 106.96 sec
kk6mrp commented 2 years ago

Any ideas?