===== case 0000 | dx=0.4 dz=0.1 internal=False nose_r=0.8 profile=20 0 =====
!! ValueError: profile needs at least 2 points
===== case 0001 | dx=0.4 dz=0.1 internal=False nose_r=0.8 profile= =====
!! ValueError: profile needs at least 2 points
===== case 0002 | dx=0.4 dz=0.1 internal=False nose_r=0.8 profile=20 0;20 5 =====
!! ValueError: point 2: Z must not increase going away from the face (Z 0.000 then 5.000). G71 needs a monotonic Z; a reversal is a re-entrant undercut, not supported.
===== case 0003 | dx=0.4 dz=0.1 internal=False nose_r=0.8 profile=20 0;20 0 =====
!! ValueError: point 2: duplicate point (Z 0.000 dia 20.000)
===== case 0004 | dx=0.4 dz=0.1 internal=False nose_r=0.8 profile=20 0 R2;20 -25;40 -25 =====
!! ValueError: the first point cannot carry an R/C corner
===== case 0005 | dx=0.4 dz=0.1 internal=False nose_r=0.8 profile=20 0;20 -25;40 -25 R2 =====
!! ValueError: the last point cannot carry an R/C corner
===== case 0006 | dx=0.4 dz=0.1 internal=False nose_r=0.8 profile=-5 0;20 -25 =====
!! ValueError: profile line 1: negative diameter -5.000
===== case 0007 | dx=0.4 dz=0.1 internal=False nose_r=0.8 profile=20 0;20 -25 Q3;40 -25 =====
!! ValueError: profile line 2: expected R<rad> or C<cham>, got 'Q3'
===== case 0008 | dx=0.4 dz=0.1 internal=False nose_r=0.8 profile=20 0;20 -25 R;40 -25 =====
!! ValueError: profile line 2: R needs a value
===== case 0009 | dx=0.4 dz=0.1 internal=False nose_r=0.8 profile=20 0;20 -25 R0;40 -25 =====
!! ValueError: profile line 2: R must be > 0
===== case 0010 | dx=0.4 dz=0.1 internal=False nose_r=0.8 profile=abc 0;20 -25 =====
!! ValueError: profile line 1: X and Z must be numbers, got 'abc 0'
===== case 0011 | dx=0.4 dz=0.1 internal=False nose_r=0.8 profile=20;20 -25 =====
!! ValueError: profile line 1: need at least 'X Z', got '20'
===== case 0012 | dx=0.4 dz=0.1 internal=False nose_r=0.8 profile=20 0;20 -25 R30;40 -25;40 -60 =====
!! ValueError: point 2: R/C of 30.000 does not fit the adjacent segment (25.000 available)
===== case 0013 | dx=0.4 dz=0.1 internal=False nose_r=0.8 profile=20 0;40 0 R2;20 0 =====
!! ValueError: point 2: cannot blend a full reversal
===== case 0014 | dx=0.4 dz=0.1 internal=False nose_r=0.8 profile=20 0;20 -25 R3;20 -50 =====
points:
   1  Z 0.000000  R 10.000000  -
   2  Z -25.000000  R 10.000000  R3.000000
   3  Z -50.000000  R 10.000000  -
contour:
   1  L  0.000000 10.000000 -> -25.000000 10.000000
   2  L  -25.000000 10.000000 -> -50.000000 10.000000
rough target dx=0.400000 dz=0.100000 internal=False:
   1  Z 0.000000  R 10.400000  -
   2  Z -25.000000  R 10.400000  R3.000000
   3  Z -50.000000  R 10.400000  -
nose comp R=0.800000 internal=False -> 0 auto fillet(s):
   1  L  -0.800000 10.000000 -> -25.800000 10.000000
   2  L  -25.800000 10.000000 -> -50.800000 10.000000
