#![allow(clippy::unwrap_used)]
use crate::examples::unit_cube;
use crate::geometry::SurfaceGeometry;
use crate::ids::UnknownId;
use crate::unknown::NativeUnknownRecord;
fn make_first_face_surface_unknown(ir: &mut crate::CadIr, record: Option<UnknownId>) -> String {
let face = &ir.model.faces[0];
let surface_id = face.surface.0.clone();
for s in &mut ir.model.surfaces {
if s.id.0 == surface_id {
s.geometry = SurfaceGeometry::Unknown { record };
break;
}
}
surface_id
}
#[test]
fn unknown_surface_json_round_trips() {
let mut ir = unit_cube();
let rec = UnknownId("synthetic:cube:unknown#0".into());
ir.set_native_unknowns(
"synthetic",
&[NativeUnknownRecord {
id: rec.clone(),
links: Vec::new(),
}],
)
.unwrap();
make_first_face_surface_unknown(&mut ir, Some(rec));
let json = ir.to_canonical_json().unwrap();
let parsed = crate::CadIr::from_json(&json).unwrap();
assert_eq!(parsed, ir, "round-trip must preserve the unknown surface");
}
#[test]
fn ordered_pcurve_uses_round_trip_with_isoparametric_state() {
let uses = vec![
crate::topology::PcurveUse {
pcurve: crate::ids::PcurveId("test:pcurve#first".into()),
isoparametric: Some(true),
parameter_range: None,
},
crate::topology::PcurveUse {
pcurve: crate::ids::PcurveId("test:pcurve#second".into()),
isoparametric: Some(false),
parameter_range: Some([0.0, 1.0]),
},
];
let json = serde_json::to_string(&uses).unwrap();
assert_eq!(
serde_json::from_str::<Vec<crate::topology::PcurveUse>>(&json).unwrap(),
uses
);
}