hronn 0.7.0

An experimental CNC toolpath generator
Documentation
// SPDX-License-Identifier: AGPL-3.0-or-later
// Copyright (c) 2023, 2025 lacklustr@protonmail.com https://github.com/eadf
// This file is part of the hronn crate.

#[cfg(not(all(feature = "glam", feature = "debug_probe_code")))]
compile_error!(
    "All of the traits 'glam' and 'debug_probe_code' features must be enabled for tests"
);

use crate::debug_access::xy_distance_to_line_squared;
use crate::prelude::MaximumTracker;
use crate::probe::ball_end::BallEndProperties;
use crate::probe::ball_end_to_edge::ball_end_to_edge_collision;
use vector_traits::approx::ulps_eq;
use vector_traits::glam::{DVec2, DVec3};

fn do_sphere_test(test_data: &[(Option<f64>, (f64, f64))], p0: DVec3, p1: DVec3, cr: f64) {
    for (sz, center) in test_data {
        let center = DVec2::new(center.0, center.1);
        let edge = xy_distance_to_line_squared(center, p0, p1);

        let mut mt = MaximumTracker::default();
        ball_end_to_edge_collision(edge, BallEndProperties::new(cr), 0, &mut mt);
        if sz.is_some() {
            assert!(mt.get_max().is_some());
            let expected = sz.unwrap();
            let sz = mt.get_max().unwrap().z_value;
            assert!(
                ulps_eq!(expected, sz, epsilon = 1e-14, max_ulps = 4),
                "{sz} != {expected}, center:{center:}, p0:{p0:}, p1:{p1:}, cr:{cr}"
            );
        } else {
            if mt.get_max().is_some() {
                println!("Should be none: {:?}", mt.get_max().unwrap());
            }
            assert!(
                mt.get_max().is_none(),
                "center:{center:}, p0:{p0:}, p1:{p1:}, cr:{cr}"
            );
        }
    }
}

#[test]
fn a_sphere_test() {
    // Rust test data
    #[rustfmt::skip]
    let test_data: [(Option<f64>, (f64, f64)); 284] = [
        (None, (0.7, 1.4052631578947365)), (None, (0.7, 1.5947368421052628)), (None, (0.7, 1.7842105263157892)),
        (None, (0.7, 1.9736842105263157)), (None, (0.7, 2.163157894736842)), (None, (0.7, 2.352631578947368)),
        (None, (0.7, 2.542105263157894)), (None, (1.2578947368421054, 0.8368421052631578)), (Some(12.13728576076188), (1.2578947368421054, 1.026315789473684)),
        (Some(12.424081230808302), (1.2578947368421054, 1.2157894736842103)), (Some(12.586322665306495), (1.2578947368421054, 1.4052631578947365)), (Some(12.687441922973973), (1.2578947368421054, 1.5947368421052628)),
        (Some(12.745329939033816), (1.2578947368421054, 1.7842105263157892)), (Some(12.767046042876187), (1.2578947368421054, 1.9736842105263157)), (Some(12.754826658640365), (1.2578947368421054, 2.163157894736842)),
        (Some(12.707437714165216), (1.2578947368421054, 2.352631578947368)), (Some(12.619457264939411), (1.2578947368421054, 2.542105263157894)), (Some(12.477220703636146), (1.2578947368421054, 2.731578947368421)),
        (Some(12.239390237448594), (1.2578947368421054, 2.921052631578947)), (None, (1.2578947368421054, 3.110526315789473)), (None, (1.8157894736842106, 0.6473684210526314)),
        (Some(12.25057260548071), (1.8157894736842106, 0.8368421052631578)), (Some(12.541430650835945), (1.8157894736842106, 1.026315789473684)), (Some(12.720333441777722), (1.8157894736842106, 1.2157894736842103)),
        (Some(12.841207505512086), (1.8157894736842106, 1.4052631578947365)), (Some(12.921404214356428), (1.8157894736842106, 1.5947368421052628)), (Some(12.968661257011323), (1.8157894736842106, 1.7842105263157892)),
        (Some(12.986613368972527), (1.8157894736842106, 1.9736842105263157)), (Some(12.976497545387183), (1.8157894736842106, 2.163157894736842)), (Some(12.937625731602065), (1.8157894736842106, 2.352631578947368)),
        (Some(12.867128255870352), (1.8157894736842106, 2.542105263157894)), (Some(12.75870615647675), (1.8157894736842106, 2.731578947368421)), (Some(12.59873718731115), (1.8157894736842106, 2.921052631578947)),
        (Some(12.350229024216482), (1.8157894736842106, 3.110526315789473)), (None, (1.8157894736842106, 3.3)), (Some(10.973095866751096), (2.3736842105263163, 0.6473684210526314)),
        (Some(12.144324006457763), (2.3736842105263163, 0.8368421052631578)), (Some(12.476079357395278), (2.3736842105263163, 1.026315789473684)), (Some(12.667147331702276), (2.3736842105263163, 1.2157894736842103)),
        (Some(12.793914164569589), (2.3736842105263163, 1.4052631578947365)), (Some(12.877336775802279), (2.3736842105263163, 1.5947368421052628)), (Some(12.926293200605146), (2.3736842105263163, 1.7842105263157892)),
        (Some(12.944856453583183), (2.3736842105263163, 1.9736842105263157)), (Some(12.934398481928897), (2.3736842105263163, 2.163157894736842)), (Some(12.894157058486197), (2.3736842105263163, 2.352631578947368)),
        (Some(12.82092907646284), (2.3736842105263163, 2.542105263157894)), (Some(12.707547693447133), (2.3736842105263163, 2.731578947368421)), (Some(12.537867627173183), (2.3736842105263163, 2.921052631578947)),
        (Some(12.263108704196963), (2.3736842105263163, 3.110526315789473)), (None, (2.3736842105263163, 3.3)), (None, (2.931578947368421, 0.45789473684210513)),
        (Some(10.666201983959825), (2.931578947368421, 0.6473684210526314)), (Some(11.410948416253792), (2.931578947368421, 0.8368421052631578)), (Some(11.855042914499826), (2.931578947368421, 1.026315789473684)),
        (Some(12.167128312975544), (2.931578947368421, 1.2157894736842103)), (Some(12.384433162158732), (2.931578947368421, 1.4052631578947365)), (Some(12.511124181413136), (2.931578947368421, 1.5947368421052628)),
        (Some(12.580679037940062), (2.931578947368421, 1.7842105263157892)), (Some(12.60634879822523), (2.931578947368421, 1.9736842105263157)), (Some(12.591930583736753), (2.931578947368421, 2.163157894736842)),
        (Some(12.535351204194397), (2.931578947368421, 2.352631578947368)), (Some(12.426830481251615), (2.931578947368421, 2.542105263157894)), (Some(12.235679856432233), (2.931578947368421, 2.731578947368421)),
        (Some(11.883893215904996), (2.931578947368421, 2.921052631578947)), (Some(11.247234032666498), (2.931578947368421, 3.110526315789473)), (None, (2.931578947368421, 3.3)),
        (None, (3.4894736842105267, 0.45789473684210513)), (Some(10.028238965726652), (3.4894736842105267, 0.6473684210526314)), (Some(10.61861353736778), (3.4894736842105267, 0.8368421052631578)),
        (Some(11.005666465163356), (3.4894736842105267, 1.026315789473684)), (Some(11.282383492646506), (3.4894736842105267, 1.2157894736842103)), (Some(11.480517478558385), (3.4894736842105267, 1.4052631578947365)),
        (Some(11.614550257948807), (3.4894736842105267, 1.5947368421052628)), (Some(11.691374539146993), (3.4894736842105267, 1.7842105263157892)), (Some(11.713382049538254), (3.4894736842105267, 1.9736842105263157)),
        (Some(11.679341539546025), (3.4894736842105267, 2.163157894736842)), (Some(11.583958553261452), (3.4894736842105267, 2.352631578947368)), (Some(11.415689498140898), (3.4894736842105267, 2.542105263157894)),
        (Some(11.150102904698272), (3.4894736842105267, 2.731578947368421)), (Some(10.724375405367251), (3.4894736842105267, 2.921052631578947)), (Some(9.744426129332677), (3.4894736842105267, 3.110526315789473)),
        (Some(8.335725163042351), (4.047368421052632, 0.45789473684210513)), (Some(9.305917498977834), (4.047368421052632, 0.6473684210526314)), (Some(9.801026961887322), (4.047368421052632, 0.8368421052631578)),
        (Some(10.141767759854854), (4.047368421052632, 1.026315789473684)), (Some(10.387137794810782), (4.047368421052632, 1.2157894736842103)), (Some(10.560504108899465), (4.047368421052632, 1.4052631578947365)),
        (Some(10.67295441677051), (4.047368421052632, 1.5947368421052628)), (Some(10.729521738971632), (4.047368421052632, 1.7842105263157892)), (Some(10.73123633241699), (4.047368421052632, 1.9736842105263157)),
        (Some(10.675492968388813), (4.047368421052632, 2.163157894736842)), (Some(10.555088382291055), (4.047368421052632, 2.352631578947368)), (Some(10.354940327651793), (4.047368421052632, 2.542105263157894)),
        (Some(10.041700902744697), (4.047368421052632, 2.731578947368421)), (Some(9.514807909291333), (4.047368421052632, 2.921052631578947)), (None, (4.047368421052632, 3.110526315789473)),
        (None, (4.605263157894737, 0.2684210526315789)), (Some(7.846085441083777), (4.605263157894737, 0.45789473684210513)), (Some(8.537070687190347), (4.605263157894737, 0.6473684210526314)),
        (Some(8.963630659218564), (4.605263157894737, 0.8368421052631578)), (Some(9.26522180292352), (4.605263157894737, 1.026315789473684)), (Some(9.482244055679137), (4.605263157894737, 1.2157894736842103)),
        (Some(9.632293738378037), (4.605263157894737, 1.4052631578947365)), (Some(9.72382563852827), (4.605263157894737, 1.5947368421052628)), (Some(9.760272330121326), (4.605263157894737, 1.7842105263157892)),
        (Some(9.741349527090817), (4.605263157894737, 1.9736842105263157)), (Some(9.662955389290813), (4.605263157894737, 2.163157894736842)), (Some(9.515567575228614), (4.605263157894737, 2.352631578947368)),
        (Some(9.279327795318641), (4.605263157894737, 2.542105263157894)), (Some(8.906960357976633), (4.605263157894737, 2.731578947368421)), (Some(8.209908807010304), (4.605263157894737, 2.921052631578947)),
        (None, (4.605263157894737, 3.110526315789473)), (None, (5.163157894736843, 0.2684210526315789)), (Some(7.177339423372573), (5.163157894736843, 0.45789473684210513)),
        (Some(7.736865946861177), (5.163157894736843, 0.6473684210526314)), (Some(8.10991586592824), (5.163157894736843, 0.8368421052631578)), (Some(8.377404643440876), (5.163157894736843, 1.026315789473684)),
        (Some(8.568358609343813), (5.163157894736843, 1.2157894736842103)), (Some(8.696202387883588), (5.163157894736843, 1.4052631578947365)), (Some(8.767269477301943), (5.163157894736843, 1.5947368421052628)),
        (Some(8.783557915262337), (5.163157894736843, 1.7842105263157892)), (Some(8.743456000364375), (5.163157894736843, 1.9736842105263157)), (Some(8.64116201590923), (5.163157894736843, 2.163157894736842)),
        (Some(8.464227743300935), (5.163157894736843, 2.352631578947368)), (Some(8.186052753071113), (5.163157894736843, 2.542105263157894)), (Some(7.73560418528838), (5.163157894736843, 2.731578947368421)),
        (None, (5.163157894736843, 2.921052631578947)), (Some(5.582355015032252), (5.7210526315789485, 0.2684210526315789)), (Some(6.439541165504915), (5.7210526315789485, 0.45789473684210513)),
        (Some(6.913228146359505), (5.7210526315789485, 0.6473684210526314)), (Some(7.242272974864469), (5.7210526315789485, 0.8368421052631578)), (Some(7.479351427900636), (5.7210526315789485, 1.026315789473684)),
        (Some(7.645987687259502), (5.7210526315789485, 1.2157894736842103)), (Some(7.7524599485519685), (5.7210526315789485, 1.4052631578947365)), (Some(7.80332651472055), (5.7210526315789485, 1.5947368421052628)),
        (Some(7.799243474739284), (5.7210526315789485, 1.7842105263157892)), (Some(7.737197627889839), (5.7210526315789485, 1.9736842105263157)), (Some(7.609378083338995), (5.7210526315789485, 2.163157894736842)),
        (Some(7.399500754182552), (5.7210526315789485, 2.352631578947368)), (Some(7.070922387343939), (5.7210526315789485, 2.542105263157894)), (Some(6.506086526352813), (5.7210526315789485, 2.731578947368421)),
        (None, (5.7210526315789485, 2.921052631578947)), (None, (6.278947368421053, 0.07894736842105254)), (Some(5.014264664004634), (6.278947368421053, 0.2684210526315789)),
        (Some(5.660719958194142), (6.278947368421053, 0.45789473684210513)), (Some(6.070917758231134), (6.278947368421053, 0.6473684210526314)), (Some(6.362414520585961), (6.278947368421053, 0.8368421052631578)),
        (Some(6.571853498335182), (6.278947368421053, 1.026315789473684)), (Some(6.715518778383012), (6.278947368421053, 1.2157894736842103)), (Some(6.801221251562656), (6.278947368421053, 1.4052631578947365)),
        (Some(6.8319741185924565), (6.278947368421053, 1.5947368421052628)), (Some(6.80712129049837), (6.278947368421053, 1.7842105263157892)), (Some(6.722104464337883), (6.278947368421053, 1.9736842105263157)),
        (Some(6.5666454445000975), (6.278947368421053, 2.163157894736842)), (Some(6.319220049193516), (6.278947368421053, 2.352631578947368)), (Some(5.927152501537306), (6.278947368421053, 2.542105263157894)),
        (Some(5.151585784263023), (6.278947368421053, 2.731578947368421)), (None, (6.836842105263159, 0.07894736842105254)), (Some(4.321191229822789), (6.836842105263159, 0.2684210526315789)),
        (Some(4.853259230803904), (6.836842105263159, 0.45789473684210513)), (Some(5.213053654232108), (6.836842105263159, 0.6473684210526314)), (Some(5.471607360038785), (6.836842105263159, 0.8368421052631578)),
        (Some(5.655520777692311), (6.836842105263159, 1.026315789473684)), (Some(5.777242125788652), (6.836842105263159, 1.2157894736842103)), (Some(5.8425731210266365), (6.836842105263159, 1.4052631578947365)),
        (Some(5.853125464806664), (6.836842105263159, 1.5947368421052628)), (Some(5.8069011194652695), (6.836842105263159, 1.7842105263157892)), (Some(5.697566586760717), (6.836842105263159, 1.9736842105263157)),
        (Some(5.511697242446459), (6.836842105263159, 2.163157894736842)), (Some(5.220266756577776), (6.836842105263159, 2.352631578947368)), (Some(4.742359666287554), (6.836842105263159, 2.542105263157894)),
        (None, (6.836842105263159, 2.731578947368421)), (None, (7.394736842105265, -0.11052631578947375)), (Some(2.791285325228926), (7.394736842105265, 0.07894736842105254)),
        (Some(3.5699563093936337), (7.394736842105265, 0.2684210526315789)), (Some(4.023943179934022), (7.394736842105265, 0.45789473684210513)), (Some(4.341802393042377), (7.394736842105265, 0.6473684210526314)),
        (Some(4.57080964030296), (7.394736842105265, 0.8368421052631578)), (Some(4.730823211301341), (7.394736842105265, 1.026315789473684)), (Some(4.831365447530233), (7.394736842105265, 1.2157894736842103)),
        (Some(4.876538189135556), (7.394736842105265, 1.4052631578947365)), (Some(4.866625722183704), (7.394736842105265, 1.5947368421052628)), (Some(4.798195472683185), (7.394736842105265, 1.7842105263157892)),
        (Some(4.662792653125948), (7.394736842105265, 1.9736842105263157)), (Some(4.442820942619373), (7.394736842105265, 2.163157894736842)), (Some(4.097880403789538), (7.394736842105265, 2.352631578947368)),
        (Some(3.4885145908813477), (7.394736842105265, 2.542105263157894)), (None, (7.394736842105265, 2.731578947368421)), (None, (7.952631578947369, -0.11052631578947375)),
        (Some(2.1735933343925486), (7.952631578947369, 0.07894736842105254)), (Some(2.782105761044293), (7.952631578947369, 0.2684210526315789)), (Some(3.176964619149766), (7.952631578947369, 0.45789473684210513)),
        (Some(3.4587321069874113), (7.952631578947369, 0.6473684210526314)), (Some(3.66075612628355), (7.952631578947369, 0.8368421052631578)), (Some(3.798118923510108), (7.952631578947369, 1.026315789473684)),
        (Some(3.8780237632631316), (7.952631578947369, 1.2157894736842103)), (Some(3.903075874260389), (7.952631578947369, 1.4052631578947365)), (Some(3.8722449995877266), (7.952631578947369, 1.5947368421052628)),
        (Some(3.7804981186974205), (7.952631578947369, 1.7842105263157892)), (Some(3.616747516939875), (7.952631578947369, 1.9736842105263157)), (Some(3.357626152170723), (7.952631578947369, 2.163157894736842)),
        (Some(2.9441361224596188), (7.952631578947369, 2.352631578947368)), (Some(2.0555632197225187), (7.952631578947369, 2.542105263157894)), (Some(0.3990010281180878), (8.510526315789475, -0.11052631578947375)),
        (Some(1.460569737351055), (8.510526315789475, 0.07894736842105254)), (Some(1.967916669880456), (8.510526315789475, 0.2684210526315789)), (Some(2.3151226965214633), (8.510526315789475, 0.45789473684210513)),
        (Some(2.565011184840399), (8.510526315789475, 0.6473684210526314)), (Some(2.7420136043233514), (8.510526315789475, 0.8368421052631578)), (Some(2.8576735475139605), (8.510526315789475, 1.026315789473684)),
        (Some(2.9172854703210804), (8.510526315789475, 1.2157894736842103)), (Some(2.9220806223212756), (8.510526315789475, 1.4052631578947365)), (Some(2.8696672761292366), (8.510526315789475, 1.5947368421052628)),
        (Some(2.7531527234157362), (8.510526315789475, 1.7842105263157892)), (Some(2.558055129130966), (8.510526315789475, 1.9736842105263157)), (Some(2.2526216345337717), (8.510526315789475, 2.163157894736842)),
        (Some(1.7438664960910255), (8.510526315789475, 2.352631578947368)), (None, (8.510526315789475, 2.542105263157894)), (None, (9.06842105263158, -0.30000000000000004)),
        (Some(-0.020782161665494625), (9.06842105263158, -0.11052631578947375)), (Some(0.6974964547713891), (9.06842105263158, 0.07894736842105254)), (Some(1.133251575084709), (9.06842105263158, 0.2684210526315789)),
        (Some(1.4403875063309342), (9.06842105263158, 0.45789473684210513)), (Some(1.6615274838817744), (9.06842105263158, 0.6473684210526314)), (Some(1.8150179626435026), (9.06842105263158, 0.8368421052631578)),
        (Some(1.909673408564134), (9.06842105263158, 1.026315789473684)), (Some(1.9491553292022508), (9.06842105263158, 1.2157894736842103)), (Some(1.933377230341412), (9.06842105263158, 1.4052631578947365)),
        (Some(1.8584739946721804), (9.06842105263158, 1.5947368421052628)), (Some(1.7153064506273663), (9.06842105263158, 1.7842105263157892)), (Some(1.4848404853500272), (9.06842105263158, 1.9736842105263157)),
        (Some(1.1223654203023743), (9.06842105263158, 2.163157894736842)), (Some(0.4592384212067908), (9.06842105263158, 2.352631578947368)), (None, (9.06842105263158, 2.542105263157894)),
        (None, (9.626315789473685, -0.30000000000000004)), (Some(-0.6741002895888546), (9.626315789473685, -0.11052631578947375)), (Some(-0.09859368662903911), (9.626315789473685, 0.07894736842105254)),
        (Some(0.2818258292658584), (9.626315789473685, 0.2684210526315789)), (Some(0.5541982700910915), (9.626315789473685, 0.45789473684210513)), (Some(0.7489635621055941), (9.626315789473685, 0.6473684210526314)),
        (Some(0.880099493388703), (9.626315789473685, 0.8368421052631578)), (Some(0.9542341975338939), (9.626315789473685, 1.026315789473684)), (Some(0.9735746690601041), (9.626315789473685, 1.2157894736842103)),
        (Some(0.9367127552907719), (9.626315789473685, 1.4052631578947365)), (Some(0.8381201562038043), (9.626315789473685, 1.5947368421052628)), (Some(0.6658395274867221), (9.626315789473685, 1.7842105263157892)),
        (Some(0.394456742469532), (9.626315789473685, 1.9736842105263157)), (Some(-0.04250054957692284), (9.626315789473685, 2.163157894736842)), (Some(-1.1564587891193352), (9.626315789473685, 2.352631578947368)),
        (None, (10.18421052631579, -0.30000000000000004)), (Some(-1.4039330024568804), (10.18421052631579, -0.11052631578947375)), (Some(-0.9190536860217737), (10.18421052631579, 0.07894736842105254)),
        (Some(-0.5838378417778933), (10.18421052631579, 0.2684210526315789)), (Some(-0.34236574504202144), (10.18421052631579, 0.45789473684210513)), (Some(-0.1721539990765395), (10.18421052631579, 0.6473684210526314)),
        (Some(-0.06249973390816699), (10.18421052631579, 0.8368421052631578)), (Some(-0.008593877745186385), (10.18421052631579, 1.026315789473684)), (Some(-0.009581165759977806), (10.18421052631579, 1.2157894736842103)),
        (Some(-0.06825590283183502), (10.18421052631579, 1.4052631578947365)), (Some(-0.19210064847288244), (10.18421052631579, 1.5947368421052628)), (Some(-0.3967456433060771), (10.18421052631579, 1.7842105263157892)),
        (Some(-0.7170242916191631), (10.18421052631579, 1.9736842105263157)), (Some(-1.2609255014633491), (10.18421052631579, 2.163157894736842)), (None, (10.18421052631579, 2.352631578947368)),
        (None, (10.742105263157896, -0.11052631578947375)), (Some(-1.758775569231187), (10.742105263157896, 0.07894736842105254)), (Some(-1.4619426856254871), (10.742105263157896, 0.2684210526315789)),
        (Some(-1.248481049988478), (10.742105263157896, 0.45789473684210513)), (Some(-1.1014213646326625), (10.742105263157896, 0.6473684210526314)), (Some(-1.0126140979493825), (10.742105263157896, 0.8368421052631578)),
        (Some(-0.978823912134826), (10.742105263157896, 1.026315789473684)), (Some(-1.0005083926847722), (10.742105263157896, 1.2157894736842103)), (Some(-1.081980263083969), (10.742105263157896, 1.4052631578947365)),
        (Some(-1.2331082964354352), (10.742105263157896, 1.5947368421052628)), (Some(-1.4745077239649895), (10.742105263157896, 1.7842105263157892)), (Some(-1.8558717127610773), (10.742105263157896, 1.9736842105263157)),
        (None, (10.742105263157896, 2.163157894736842)), (None, (11.3, 0.45789473684210513)), (None, (11.3, 0.6473684210526314)),
        (None, (11.3, 0.8368421052631578)), (None, (11.3, 1.026315789473684)), (None, (11.3, 1.2157894736842103)),
        (None, (11.3, 1.4052631578947365)), (None, (11.3, 1.5947368421052628)),
    ];
    let p0 = DVec3::new(10.0, 1.0, -1.0);
    let p1 = DVec3::new(2.0, 2.0, 13.0);
    let cr = 1.3;
    do_sphere_test(&test_data, p0, p1, cr);
}

#[test]
fn a_sphere_test2() {
    // Rust test data
    #[rustfmt::skip]
    let test_data: [(Option<f64>, (f64, f64)); 280] = [
        (None, (-0.30000000000000004, 0.45789473684210513)), (None, (-0.30000000000000004, 0.6473684210526314)), (None, (-0.30000000000000004, 0.8368421052631578)),
        (None, (-0.30000000000000004, 1.026315789473684)), (None, (-0.30000000000000004, 1.2157894736842103)), (None, (-0.30000000000000004, 1.4052631578947365)),
        (None, (-0.30000000000000004, 1.5947368421052628)), (None, (0.15263157894736845, -0.11052631578947375)), (Some(-1.948391113786545), (0.15263157894736845, 0.07894736842105254)),
        (Some(-1.6391225508688596), (0.15263157894736845, 0.2684210526315789)), (Some(-1.4765386210275069), (0.15263157894736845, 0.45789473684210513)), (Some(-1.3793384288828734), (0.15263157894736845, 0.6473684210526314)),
        (Some(-1.327710814424118), (0.15263157894736845, 0.8368421052631578)), (Some(-1.3144675356807638), (0.15263157894736845, 1.026315789473684)), (Some(-1.338022005423273), (0.15263157894736845, 1.2157894736842103)),
        (Some(-1.4012628126888507), (0.15263157894736845, 1.4052631578947365)), (Some(-1.5137081663622405), (0.15263157894736845, 1.5947368421052628)), (Some(-1.7025214569390106), (0.15263157894736845, 1.7842105263157892)),
        (Some(-2.145384938720333), (0.15263157894736845, 1.9736842105263157)), (None, (0.605263157894737, -0.30000000000000004)), (Some(-1.7514435968618884), (0.605263157894737, -0.11052631578947375)),
        (Some(-1.4718363603242293), (0.605263157894737, 0.07894736842105254)), (Some(-1.29237321397417), (0.605263157894737, 0.2684210526315789)), (Some(-1.163924566502615), (0.605263157894737, 0.45789473684210513)),
        (Some(-1.0755704961122163), (0.605263157894737, 0.6473684210526314)), (Some(-1.0220407223461478), (0.605263157894737, 0.8368421052631578)), (Some(-1.0011092792330623), (0.605263157894737, 1.026315789473684)),
        (Some(-1.012747354902343), (0.605263157894737, 1.2157894736842103)), (Some(-1.0591132276841932), (0.605263157894737, 1.4052631578947365)), (Some(-1.1453698397893457), (0.605263157894737, 1.5947368421052628)),
        (Some(-1.2822119564699013), (0.605263157894737, 1.7842105263157892)), (Some(-1.4942831482384284), (0.605263157894737, 1.9736842105263157)), (Some(-1.868282495431644), (0.605263157894737, 2.163157894736842)),
        (None, (0.605263157894737, 2.352631578947368)), (None, (1.0578947368421054, -0.30000000000000004)), (Some(-1.5627577731368587), (1.0578947368421054, -0.11052631578947375)),
        (Some(-1.2604010055883967), (1.0578947368421054, 0.07894736842105254)), (Some(-1.0550388711761023), (1.0578947368421054, 0.2684210526315789)), (Some(-0.9080709678614217), (1.0578947368421054, 0.45789473684210513)),
        (Some(-0.8046114133638089), (1.0578947368421054, 0.6473684210526314)), (Some(-0.7376226316607157), (1.0578947368421054, 0.8368421052631578)), (Some(-0.703830622616728), (1.0578947368421054, 1.026315789473684)),
        (Some(-0.7023726820419129), (1.0578947368421054, 1.2157894736842103)), (Some(-0.7344917918511027), (1.0578947368421054, 1.4052631578947365)), (Some(-0.8039834310170135), (1.0578947368421054, 1.5947368421052628)),
        (Some(-0.9188358863409425), (1.0578947368421054, 1.7842105263157892)), (Some(-1.0962688357117454), (1.0578947368421054, 1.9736842105263157)), (Some(-1.3841349157477563), (1.0578947368421054, 2.163157894736842)),
        (None, (1.0578947368421054, 2.352631578947368)), (None, (1.510526315789474, -0.30000000000000004)), (Some(-1.4343050183974015), (1.510526315789474, -0.11052631578947375)),
        (Some(-1.0634711114812685), (1.510526315789474, 0.07894736842105254)), (Some(-0.8267583475127535), (1.510526315789474, 0.2684210526315789)), (Some(-0.6590377148220908), (1.510526315789474, 0.45789473684210513)),
        (Some(-0.53939492899329), (1.510526315789474, 0.6473684210526314)), (Some(-0.4584414272143231), (1.510526315789474, 0.8368421052631578)), (Some(-0.41165516378590494), (1.510526315789474, 1.026315789473684)),
        (Some(-0.39729376855932297), (1.510526315789474, 1.2157894736842103)), (Some(-0.41575177387231443), (1.510526315789474, 1.4052631578947365)), (Some(-0.46969883352173114), (1.510526315789474, 1.5947368421052628)),
        (Some(-0.565129507977924), (1.510526315789474, 1.7842105263157892)), (Some(-0.7145303069425968), (1.510526315789474, 1.9736842105263157)), (Some(-0.9481247394514521), (1.510526315789474, 2.163157894736842)),
        (Some(-1.3965077239512775), (1.510526315789474, 2.352631578947368)), (Some(-1.384021169088574), (1.9631578947368424, -0.11052631578947375)), (Some(-0.8857657809892481), (1.9631578947368424, 0.07894736842105254)),
        (Some(-0.6090797148686166), (1.9631578947368424, 0.2684210526315789)), (Some(-0.41751734916674843), (1.9631578947368424, 0.45789473684210513)), (Some(-0.2802621947002053), (1.9631578947368424, 0.6473684210526314)),
        (Some(-0.18464728376048622), (1.9631578947368424, 0.8368421052631578)), (Some(-0.12459698177297884), (1.9631578947368424, 1.026315789473684)), (Some(-0.09739328381505419), (1.9631578947368424, 1.2157894736842103)),
        (Some(-0.10260299239517678), (1.9631578947368424, 1.4052631578947365)), (Some(-0.1419258598607065), (1.9631578947368424, 1.5947368421052628)), (Some(-0.2198200863668236), (1.9631578947368424, 1.7842105263157892)),
        (Some(-0.3455477259584324), (1.9631578947368424, 1.9736842105263157)), (Some(-0.5396765257290815), (1.9631578947368424, 2.163157894736842)), (Some(-0.8655599381252739), (1.9631578947368424, 2.352631578947368)),
        (None, (1.9631578947368424, 2.542105263157894)), (None, (2.415789473684211, -0.11052631578947375)), (Some(-0.7362032170354019), (2.415789473684211, 0.07894736842105254)),
        (Some(-0.4042861664569577), (2.415789473684211, 0.2684210526315789)), (Some(-0.18444420126796812), (2.415789473684211, 0.45789473684210513)), (Some(-0.027665005987543845), (2.415789473684211, 0.6473684210526314)),
        (Some(0.08354396559801103), (2.415789473684211, 0.8368421052631578)), (Some(0.15727855636192256), (2.415789473684211, 1.026315789473684)), (Some(0.19739170120241933), (2.415789473684211, 1.2157894736842103)),
        (Some(0.2051670906286227), (2.415789473684211, 1.4052631578947365)), (Some(0.17978146580095222), (2.415789473684211, 1.5947368421052628)), (Some(0.11801334316471501), (2.415789473684211, 1.7842105263157892)),
        (Some(0.012918314759756466), (2.415789473684211, 1.9736842105263157)), (Some(-0.15016832622349896), (2.415789473684211, 2.163157894736842)), (Some(-0.4090287778597639), (2.415789473684211, 2.352631578947368)),
        (Some(-1.0072723560250925), (2.415789473684211, 2.542105263157894)), (None, (2.8684210526315796, -0.11052631578947375)), (Some(-0.6364208874686086), (2.8684210526315796, 0.07894736842105254)),
        (Some(-0.21597993596295484), (2.8684210526315796, 0.2684210526315789)), (Some(0.038888665720254956), (2.8684210526315796, 0.45789473684210513)), (Some(0.21779861426534053), (2.8684210526315796, 0.6473684210526314)),
        (Some(0.34583813073477043), (2.8684210526315796, 0.8368421052631578)), (Some(0.4338514642370128), (2.8684210526315796, 1.026315789473684)), (Some(0.48707291671399866), (2.8684210526315796, 1.2157894736842103)),
        (Some(0.5077058251752853), (2.8684210526315796, 1.4052631578947365)), (Some(0.49575979348800114), (2.8684210526315796, 1.5947368421052628)), (Some(0.44905404693112483), (2.8684210526315796, 1.7842105263157892)),
        (Some(0.362390062331289), (2.8684210526315796, 1.9736842105263157)), (Some(0.2249986403461579), (2.8684210526315796, 2.163157894736842)), (Some(0.012015266219352894), (2.8684210526315796, 2.352631578947368)),
        (Some(-0.3646971166276477), (2.8684210526315796, 2.542105263157894)), (None, (2.8684210526315796, 2.731578947368421)), (Some(-0.7023682110889389), (3.321052631578948, 0.07894736842105254)),
        (Some(-0.05046433333675604), (3.321052631578948, 0.2684210526315789)), (Some(0.2506224679256659), (3.321052631578948, 0.45789473684210513)), (Some(0.4553290655832303), (3.321052631578948, 0.6473684210526314)),
        (Some(0.6018435792452361), (3.321052631578948, 0.8368421052631578)), (Some(0.7049407716372726), (3.321052631578948, 1.026315789473684)), (Some(0.7716114814281674), (3.321052631578948, 1.2157894736842103)),
        (Some(0.8051033975970927), (3.321052631578948, 1.4052631578947365)), (Some(0.8062594896973103), (3.321052631578948, 1.5947368421052628)), (Some(0.773816439708346), (3.321052631578948, 1.7842105263157892)),
        (Some(0.7039501057978688), (3.321052631578948, 1.9736842105263157)), (Some(0.5886186139684824), (3.321052631578948, 2.163157894736842)), (Some(0.4104665617396859), (3.321052631578948, 2.352631578947368)),
        (Some(0.12106662920847433), (3.321052631578948, 2.542105263157894)), (None, (3.321052631578948, 2.731578947368421)), (None, (3.7736842105263166, 0.07894736842105254)),
        (Some(0.07910415369416834), (3.7736842105263166, 0.2684210526315789)), (Some(0.4479333939308243), (3.7736842105263166, 0.45789473684210513)), (Some(0.6838355782554935), (3.7736842105263166, 0.6473684210526314)),
        (Some(0.8510425375222301), (3.7736842105263166, 0.8368421052631578)), (Some(0.9702943041424124), (3.7736842105263166, 1.026315789473684)), (Some(1.0509159442070033), (3.7736842105263166, 1.2157894736842103)),
        (Some(1.097397499998929), (3.7736842105263166, 1.4052631578947365)), (Some(1.111460007443554), (3.7736842105263166, 1.5947368421052628)), (Some(1.0926896074446752), (3.7736842105263166, 1.7842105263157892)),
        (Some(1.0383925127510734), (3.7736842105263166, 1.9736842105263157)), (Some(0.9425337486545755), (3.7736842105263166, 2.163157894736842)), (Some(0.7925369775951869), (3.7736842105263166, 2.352631578947368)),
        (Some(0.5578842457146058), (3.7736842105263166, 2.542105263157894)), (Some(0.10511211645785745), (3.7736842105263166, 2.731578947368421)), (Some(0.13242363850622096), (4.226315789473685, 0.2684210526315789)),
        (Some(0.6261630508355145), (4.226315789473685, 0.45789473684210513)), (Some(0.9017830657886432), (4.226315789473685, 0.6473684210526314)), (Some(1.0927471199205783), (4.226315789473685, 0.8368421052631578)),
        (Some(1.2295731670896217), (4.226315789473685, 1.026315789473684)), (Some(1.32483754485577), (4.226315789473685, 1.2157894736842103)), (Some(1.384575227927195), (4.226315789473685, 1.4052631578947365)),
        (Some(1.411480003555116), (4.226315789473685, 1.5947368421052628)), (Some(1.4059657308357376), (4.226315789473685, 1.7842105263157892)), (Some(1.3663113738436927), (4.226315789473685, 1.9736842105263157)),
        (Some(1.2880268902960565), (4.226315789473685, 2.163157894736842)), (Some(1.1617872141018666), (4.226315789473685, 2.352631578947368)), (Some(0.9668523128497444), (4.226315789473685, 2.542105263157894)),
        (Some(0.6389903556856342), (4.226315789473685, 2.731578947368421)), (None, (4.226315789473685, 2.921052631578947)), (None, (4.678947368421054, 0.2684210526315789)),
        (Some(0.7765431583692124), (4.678947368421054, 0.45789473684210513)), (Some(1.1069103739729707), (4.678947368421054, 0.6473684210526314)), (Some(1.3260297092743143), (4.678947368421054, 0.8368421052631578)),
        (Some(1.4823284841762472), (4.678947368421054, 1.026315789473684)), (Some(1.5931621011592705), (4.678947368421054, 1.2157894736842103)), (Some(1.6665724342207813), (4.678947368421054, 1.4052631578947365)),
        (Some(1.7063836251931093), (4.678947368421054, 1.5947368421052628)), (Some(1.7138589920967309), (4.678947368421054, 1.7842105263157892)), (Some(1.6881555653783822), (4.678947368421054, 1.9736842105263157)),
        (Some(1.6260256560588917), (4.678947368421054, 2.163157894736842)), (Some(1.520478425469433), (4.678947368421054, 2.352631578947368)), (Some(1.3567391108844145), (4.678947368421054, 2.542105263157894)),
        (Some(1.096619592694539), (4.678947368421054, 2.731578947368421)), (Some(0.4856829980149071), (4.678947368421054, 2.921052631578947)), (None, (5.131578947368422, 0.2684210526315789)),
        (Some(0.8779771365729176), (5.131578947368422, 0.45789473684210513)), (Some(1.2956568024924662), (5.131578947368422, 0.6473684210526314)), (Some(1.549607459691819), (5.131578947368422, 0.8368421052631578)),
        (Some(1.727966164749496), (5.131578947368422, 1.026315789473684)), (Some(1.855597432421879), (5.131578947368422, 1.2157894736842103)), (Some(1.943270462051301), (5.131578947368422, 1.4052631578947365)),
        (Some(1.9961837768111323), (5.131578947368422, 1.5947368421052628)), (Some(2.0165181514223915), (5.131578947368422, 1.7842105263157892)), (Some(2.004263982017952), (5.131578947368422, 1.9736842105263157)),
        (Some(1.9572179315882552), (5.131578947368422, 2.163157894736842)), (Some(1.8701456981913724), (5.131578947368422, 2.352631578947368)), (Some(1.7322030327188334), (5.131578947368422, 2.542105263157894)),
        (Some(1.5183017141081694), (5.131578947368422, 2.731578947368421)), (Some(1.1388280456750641), (5.131578947368422, 2.921052631578947)), (None, (5.131578947368422, 3.110526315789473)),
        (Some(0.822599621215298), (5.584210526315791, 0.45789473684210513)), (Some(1.4618104824531792), (5.584210526315791, 0.6473684210526314)), (Some(1.7616382171619918), (5.584210526315791, 0.8368421052631578)),
        (Some(1.9656921412177926), (5.584210526315791, 1.026315789473684)), (Some(2.1117544526952976), (5.584210526315791, 1.2157894736842103)), (Some(2.2144898584040824), (5.584210526315791, 1.4052631578947365)),
        (Some(2.280842766304298), (5.584210526315791, 1.5947368421052628)), (Some(2.314034659950641), (5.584210526315791, 1.7842105263157892)), (Some(2.3148887981826904), (5.584210526315791, 1.9736842105263157)),
        (Some(2.282121490491325), (5.584210526315791, 2.163157894736842)), (Some(2.2118798019783172), (5.584210526315791, 2.352631578947368)), (Some(2.0960678897704392), (5.584210526315791, 2.542105263157894)),
        (Some(1.9171932076539961), (5.584210526315791, 2.731578947368421)), (Some(1.6262434401480987), (5.584210526315791, 2.921052631578947)), (None, (5.584210526315791, 3.110526315789473)),
        (None, (6.036842105263159, 0.45789473684210513)), (Some(1.5924770462274978), (6.036842105263159, 0.6473684210526314)), (Some(1.9593277416962376), (6.036842105263159, 0.8368421052631578)),
        (Some(2.1944238245394336), (6.036842105263159, 1.026315789473684)), (Some(2.361118747203589), (6.036842105263159, 1.2157894736842103)), (Some(2.4799802567822518), (6.036842105263159, 1.4052631578947365)),
        (Some(2.5602704073203277), (6.036842105263159, 1.5947368421052628)), (Some(2.606447398972997), (6.036842105263159, 1.7842105263157892)), (Some(2.6202109840876195), (6.036842105263159, 1.9736842105263157)),
        (Some(2.6011279651726573), (6.036842105263159, 2.163157894736842)), (Some(2.5464803373054847), (6.036842105263159, 2.352631578947368)), (Some(2.4501924659114884), (6.036842105263159, 2.542105263157894)),
        (Some(2.2995973832821672), (6.036842105263159, 2.731578947368421)), (Some(2.063878600234082), (6.036842105263159, 2.921052631578947)), (Some(1.6065904952073058), (6.036842105263159, 3.110526315789473)),
        (Some(1.6487269844413237), (6.489473684210528, 0.6473684210526314)), (Some(2.138077252013697), (6.489473684210528, 0.8368421052631578)), (Some(2.4126389675950985), (6.489473684210528, 1.026315789473684)),
        (Some(2.6030070496323177), (6.489473684210528, 1.2157894736842103)), (Some(2.7371359455390056), (6.489473684210528, 1.4052631578947365)), (Some(2.824777601901644), (6.489473684210528, 1.5947368421052628)),
        (Some(2.875924225421655), (6.489473684210528, 1.7842105263157892)), (Some(2.8952699946500813), (6.489473684210528, 1.9736842105263157)), (Some(2.8843742576869316), (6.489473684210528, 2.163157894736842)),
        (Some(2.842372028025684), (6.489473684210528, 2.352631578947368)), (Some(2.7655912746184343), (6.489473684210528, 2.542105263157894)), (Some(2.645597760495308), (6.489473684210528, 2.731578947368421)),
        (Some(2.462249913576856), (6.489473684210528, 2.921052631578947)), (Some(2.143504369938306), (6.489473684210528, 3.110526315789473)), (None, (6.489473684210528, 3.3)),
        (None, (6.942105263157896, 0.6473684210526314)), (Some(2.277678034338628), (6.942105263157896, 0.8368421052631578)), (Some(2.559410994587414), (6.942105263157896, 1.026315789473684)),
        (Some(2.735211113667882), (6.942105263157896, 1.2157894736842103)), (Some(2.854528599943996), (6.942105263157896, 1.4052631578947365)), (Some(2.933859786320621), (6.942105263157896, 1.5947368421052628)),
        (Some(2.9806572931479662), (6.942105263157896, 1.7842105263157892)), (Some(2.998443560063494), (6.942105263157896, 1.9736842105263157)), (Some(2.9884206226349477), (6.942105263157896, 2.163157894736842)),
        (Some(2.9499196650085437), (6.942105263157896, 2.352631578947368)), (Some(2.8801568044554484), (6.942105263157896, 2.542105263157894)), (Some(2.7730519294112925), (6.942105263157896, 2.731578947368421)),
        (Some(2.615592840353986), (6.942105263157896, 2.921052631578947)), (Some(2.3733346132385025), (6.942105263157896, 3.110526315789473)), (None, (6.942105263157896, 3.3)),
        (None, (7.394736842105265, 0.6473684210526314)), (Some(2.1257305925067174), (7.394736842105265, 0.8368421052631578)), (Some(2.4655859740463564), (7.394736842105265, 1.026315789473684)),
        (Some(2.6587474515743317), (7.394736842105265, 1.2157894736842103)), (Some(2.7864947832950797), (7.394736842105265, 1.4052631578947365)), (Some(2.8704463244155836), (7.394736842105265, 1.5947368421052628)),
        (Some(2.9196793548026694), (7.394736842105265, 1.7842105263157892)), (Some(2.938341756022602), (7.394736842105265, 1.9736842105263157)), (Some(2.927828296982036), (7.394736842105265, 2.163157894736842)),
        (Some(2.8873642217170987), (7.394736842105265, 2.352631578947368)), (Some(2.813689682605202), (7.394736842105265, 2.542105263157894)), (Some(2.699487403248324), (7.394736842105265, 2.731578947368421)),
        (Some(2.528157518438528), (7.394736842105265, 2.921052631578947)), (Some(2.248556403138114), (7.394736842105265, 3.110526315789473)), (None, (7.394736842105265, 3.3)),
        (Some(1.8546150612796615), (7.847368421052633, 1.026315789473684)), (Some(2.297478543060987), (7.847368421052633, 1.2157894736842103)), (Some(2.4862918336377575), (7.847368421052633, 1.4052631578947365)),
        (Some(2.598737187311148), (7.847368421052633, 1.5947368421052628)), (Some(2.661977994576726), (7.847368421052633, 1.7842105263157892)), (Some(2.6855324643192358), (7.847368421052633, 1.9736842105263157)),
        (Some(2.672289185575881), (7.847368421052633, 2.163157894736842)), (Some(2.620661571117126), (7.847368421052633, 2.352631578947368)), (Some(2.5234613789724927), (7.847368421052633, 2.542105263157894)),
        (Some(2.360877449131138), (7.847368421052633, 2.731578947368421)), (Some(2.051608886213452), (7.847368421052633, 2.921052631578947)), (None, (7.847368421052633, 3.110526315789473)),
        (None, (8.3, 1.4052631578947365)), (None, (8.3, 1.5947368421052628)), (None, (8.3, 1.7842105263157892)),
        (None, (8.3, 1.9736842105263157)), (None, (8.3, 2.163157894736842)), (None, (8.3, 2.352631578947368)),
        (None, (8.3, 2.542105263157894)),
    ];
    let p0 = DVec3::new(1.0, 1.0, -1.0);
    let p1 = DVec3::new(7.0, 2.0, 3.0);
    let cr = 1.3;
    do_sphere_test(&test_data, p0, p1, cr);
}