Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
2 tasks
craftyguy opened this issue May 2, 2022 · 11 comments
Open
2 tasks

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

craftyguy opened this issue May 2, 2022 · 11 comments
Assignees

Comments

@craftyguy
Copy link

craftyguy commented May 2, 2022

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

  • Project file
  • Screenshot

Version of PrusaSlicer

2.4.2

Operating system

Alpine Linux (edge)

Printer model

n/a

@Jony01
Copy link
Collaborator

Jony01 commented May 6, 2022

Hi @craftyguy,
could you please confirm, that this fix helps solve your issue with test:
6ab5171

@Jony01 Jony01 self-assigned this May 10, 2022
@kk6mrp
Copy link

kk6mrp commented May 12, 2022

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<size_t>::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: void-linux/void-packages#35105

@craftyguy
Copy link
Author

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
Copy link

kk6mrp commented May 13, 2022

@craftyguy
Copy link
Author

@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
Copy link

kk6mrp commented May 13, 2022

@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
Copy link
Author

@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 added a commit that referenced this issue May 16, 2022


Improved readability by introducing invalid_id() getter.
Made the ResetIndexWhenRemoved flag active in both debug and release mode,
it used to be made active by Vojtech for release mode only for unknown
reason.
@bubnikv
Copy link
Collaborator

bubnikv commented May 17, 2022

@craftyguy would you please test the current master?

I hope I have fixed the unit tests with
15a082b
f5ec76c

@craftyguy
Copy link
Author

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
Copy link

kk6mrp commented Jul 28, 2022

@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
Copy link

kk6mrp commented Aug 7, 2022

Any ideas?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants