This is the English reading version of the Dutch news item Testen van opensource CAD kernels.
OCCT, SMLib and SolidCore are three kernels for CAD: the engine that turns your sketch into a real solid, works out booleans and writes your model to STEP. I ran the same sixteen models through all three to see where they agree and where they drift apart. Below is how that test works and what comes out per model.
How the test works
Every model is a single .scad file, and the same file goes through all three kernels. The test then compares two things: the outer dimensions of the model and its volume.
The error margin I use is the difference in volume compared with OCCT, in percent. That number tells you whether two kernels built the same shape. A small difference is normal, because where a curved face is divided into triangles the volume always deviates a fraction. Below 0.3 percent I put that down to it; if it drifts further apart, something is wrong in the kernel itself.
Four models that all three kernels build
All three manage these four: a cube with a spherical bite, a tapered tube with a hole, a cube with rounded edges and three plates with holes of different sizes. The margins sit between 0.01 and 0.26 percent, so the three arrive at the same model.




Three models that only OCCT and SMLib can handle
The L-bracket, the flange and the V-belt pulley need features SolidCore does not have yet: revolving a profile around an axis, and selecting edges as convex or concave. That is not a fundamental difference but work still to be done. SolidCore is a young rebuild and currently manages four of the sixteen models.



And this only OCCT
A plate of 100 by 100 mm with a cylinder of 40 mm on top, its axis exactly on the edge of the plate, then everything rounded by 2 mm.
The cylinder overhangs the plate by half, so the transition between cylinder and plate ends on the free side face. That is exactly where SMLib and SolidCore get stuck. SMLib cannot classify the corner properly and the code that has to close the gap on that face does not work there. SolidCore trips up even earlier, at the point where the two rails meet. In OCCT it works without complaint.
This is the case where a kernel proves itself: not in the round hole in a plate, but in the shape just next to it. I reported it to the project, with the error messages; it is in issue #1410.

Of the sixteen models in this test, OCCT and SMLib arrive at the same dimensions and volumes on all sixteen. SolidCore manages four. The difference is not in everyday shapes, but in the awkward transitions.
My verdict: it is impressive how well the Rust port already works, given it has only been worked on for a few days. The progress per two days looks like a year of OCCT development, and I expect we will have an OCCT alternative within two weeks.
The test set and the models are in the openscad-occt fork. Keep an eye on this site for updates and tests, I will keep following the three kernels and publish the next measurement here.
The images were made with OCCT 7.6.3 from the .scad sources of the test; for the four models in the first block the other two build exactly the same shape.
