Oracle: 25/29 (14 and 15 now match Fusion). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AS5Tn3xieewUSg3uxrMVdL
114 lines
4.3 KiB
Rust
114 lines
4.3 KiB
Rust
use super::*;
|
|
|
|
#[test]
|
|
fn construct_polylines_positive0() {
|
|
let lines = vec![
|
|
(Point3::new(0.0, 0.0, 0.0), Point3::new(1.0, 0.0, 0.0)),
|
|
(Point3::new(1.0, 0.0, 0.0), Point3::new(0.0, 1.0, 0.0)),
|
|
(Point3::new(1.0, 1.0, 0.0), Point3::new(0.0, 0.0, 1.0)),
|
|
(Point3::new(0.0, 1.0, 1.0), Point3::new(1.0, 1.0, 1.0)),
|
|
(Point3::new(0.0, 0.0, 1.0), Point3::new(1.0, 0.0, 1.0)),
|
|
(Point3::new(0.0, 1.0, 0.0), Point3::new(1.0, 1.0, 0.0)),
|
|
(Point3::new(1.0, 1.0, 1.0), Point3::new(0.0, 0.0, 0.0)),
|
|
(Point3::new(1.0, 0.0, 1.0), Point3::new(0.0, 1.0, 1.0)),
|
|
];
|
|
let polyline = construct_polylines(&lines);
|
|
assert_eq!(polyline.len(), 1);
|
|
assert_eq!(polyline[0].len(), 9);
|
|
|
|
let mut sign = None;
|
|
for line in polyline[0].windows(2) {
|
|
let a = line[0][0] + line[0][1] * 2.0 + line[0][2] * 4.0;
|
|
let b = line[1][0] + line[1][1] * 2.0 + line[1][2] * 4.0;
|
|
let x = b - a;
|
|
assert!(f64::abs(x) == 1.0 || f64::abs(x) == 7.0);
|
|
let s = f64::signum(x * (x - 2.0) * (x + 2.0));
|
|
if let Some(sign) = sign {
|
|
assert!(s == sign);
|
|
} else {
|
|
sign = Some(s);
|
|
}
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn construct_polylines_positive1() {
|
|
let lines = vec![
|
|
(Point3::new(0.0, 0.0, 0.0), Point3::new(1.0, 0.0, 0.0)),
|
|
(Point3::new(1.0, 0.0, 0.0), Point3::new(1.0, 1.0, 0.0)),
|
|
(Point3::new(1.0, 0.0, 1.0), Point3::new(1.0, 1.0, 1.0)),
|
|
(Point3::new(1.0, 1.0, 1.0), Point3::new(0.0, 1.0, 1.0)),
|
|
(Point3::new(1.0, 1.0, 0.0), Point3::new(0.0, 1.0, 0.0)),
|
|
(Point3::new(0.0, 1.0, 0.0), Point3::new(0.0, 0.0, 0.0)),
|
|
(Point3::new(0.0, 0.0, 1.0), Point3::new(1.0, 0.0, 1.0)),
|
|
(Point3::new(0.0, 1.0, 1.0), Point3::new(0.0, 0.0, 1.0)),
|
|
];
|
|
let polyline = construct_polylines(&lines);
|
|
assert_eq!(polyline.len(), 2);
|
|
assert_eq!(polyline[0].len(), 5);
|
|
assert_eq!(polyline[1].len(), 5);
|
|
}
|
|
|
|
#[test]
|
|
fn construct_polylines_positive2() {
|
|
let lines = vec![
|
|
(Point3::new(0.0, 0.0, 0.0), Point3::new(1.0, 0.0, 0.0)),
|
|
(Point3::new(1.0, 0.0, 0.0), Point3::new(0.0, 1.0, 0.0)),
|
|
(Point3::new(1.0, 1.0, 0.0), Point3::new(0.0, 0.0, 1.0)),
|
|
(Point3::new(0.0, 1.0, 1.0), Point3::new(1.0, 1.0, 1.0)),
|
|
(Point3::new(0.0, 0.0, 1.0), Point3::new(1.0, 0.0, 1.0)),
|
|
(Point3::new(1.0, 1.0, 0.0), Point3::new(1.0, 1.0, 0.0)),
|
|
(Point3::new(0.0, 1.0, 0.0), Point3::new(1.0, 1.0, 0.0)),
|
|
(Point3::new(1.0, 1.0, 1.0), Point3::new(0.0, 0.0, 0.0)),
|
|
(Point3::new(1.0, 0.0, 1.0), Point3::new(0.0, 1.0, 1.0)),
|
|
];
|
|
let polyline = construct_polylines(&lines);
|
|
assert_eq!(polyline.len(), 1);
|
|
assert_eq!(polyline[0].len(), 9);
|
|
|
|
let mut sign = None;
|
|
for line in polyline[0].windows(2) {
|
|
let a = line[0][0] + line[0][1] * 2.0 + line[0][2] * 4.0;
|
|
let b = line[1][0] + line[1][1] * 2.0 + line[1][2] * 4.0;
|
|
let x = b - a;
|
|
assert!(f64::abs(x) == 1.0 || f64::abs(x) == 7.0);
|
|
let s = f64::signum(x * (x - 2.0) * (x + 2.0));
|
|
if let Some(sign) = sign {
|
|
assert!(s == sign);
|
|
} else {
|
|
sign = Some(s);
|
|
}
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn construct_polylines_positive3() {
|
|
let lines = vec![
|
|
(Point3::new(0.0, 0.0, 0.0), Point3::new(1.0, 0.0, 0.0)),
|
|
(Point3::new(1.0, 0.0, 0.0), Point3::new(0.0, 1.0, 0.0)),
|
|
(Point3::new(1.0, 1.0, 0.0), Point3::new(0.0, 0.0, 1.0)),
|
|
(Point3::new(0.0, 1.0, 1.0), Point3::new(1.0, 1.0, 1.0)),
|
|
(Point3::new(0.0, 0.0, 1.0), Point3::new(1.0, 0.0, 1.0)),
|
|
(Point3::new(1.0, 1.0, 0.0), Point3::new(1.0, 1.0, 0.0)),
|
|
(Point3::new(0.0, 1.0, 0.0), Point3::new(1.0, 1.0, 0.0)),
|
|
(Point3::new(1.0, 0.0, 1.0), Point3::new(0.0, 1.0, 1.0)),
|
|
];
|
|
let polyline = construct_polylines(&lines);
|
|
assert_eq!(polyline.len(), 1);
|
|
assert_eq!(polyline[0].len(), 8);
|
|
|
|
let mut sign = None;
|
|
for line in polyline[0].windows(2) {
|
|
let a = line[0][0] + line[0][1] * 2.0 + line[0][2] * 4.0;
|
|
let b = line[1][0] + line[1][1] * 2.0 + line[1][2] * 4.0;
|
|
let x = b - a;
|
|
assert!(f64::abs(x) == 1.0);
|
|
let s = f64::signum(x * (x - 2.0) * (x + 2.0));
|
|
if let Some(sign) = sign {
|
|
assert!(s == sign);
|
|
} else {
|
|
sign = Some(s);
|
|
}
|
|
}
|
|
}
|