use super::ReadHtg;
use crate::geometry::ntree::{
Balancing, Input, Octree, Pairing, Quadtree, Rescaling,
node::{Kind, Node},
write::htg::WriteHtg,
};
use std::fs::{read_to_string, write};
fn octree() -> Octree<u16, usize> {
let mut octree = Octree::<u16, usize> {
balanced: Balancing::None,
nodes: vec![Node {
corner: [0, 0, 0],
length: 8,
facets: [None; 6],
kind: Kind::Leaf,
value: None,
}],
paired: Pairing::None,
rescale: Rescaling {
center: [4.0, 4.0, 4.0],
cell: 1.0,
half: 4.0,
},
};
octree.subdivide(0).unwrap();
let children = *octree.nodes[0].orthants().unwrap();
for &child in &[children[1], children[2], children[4]] {
octree.subdivide(child).unwrap();
}
octree
}
fn quadtree() -> Quadtree<u16, usize> {
let mut quadtree = Quadtree::<u16, usize> {
balanced: Balancing::None,
nodes: vec![Node {
corner: [0, 0],
length: 8,
facets: [None; 4],
kind: Kind::Leaf,
value: None,
}],
paired: Pairing::None,
rescale: Rescaling {
center: [4.0, 4.0],
cell: 1.0,
half: 4.0,
},
};
quadtree.subdivide(0).unwrap();
quadtree
}
#[test]
fn round_trip_octree() {
let original = "target/htg_octree_a.htg";
octree().write_htg(original).unwrap();
let read = Octree::<u16, usize>::read_htg(original).unwrap();
assert_eq!(read.len(), 33);
let reread = "target/htg_octree_b.htg";
read.write_htg(reread).unwrap();
assert_eq!(
read_to_string(original).unwrap(),
read_to_string(reread).unwrap()
);
}
#[test]
fn round_trip_quadtree_via_input() {
let original = "target/htg_quadtree_a.htg";
quadtree().write_htg(original).unwrap();
let read = Quadtree::<u16, usize>::try_from(Input::Htg(original)).unwrap();
assert_eq!(read.len(), 5);
let reread = "target/htg_quadtree_b.htg";
read.write_htg(reread).unwrap();
assert_eq!(
read_to_string(original).unwrap(),
read_to_string(reread).unwrap()
);
}
#[test]
fn compressed_is_unsupported() {
let path = "target/htg_compressed.htg";
write(
path,
"<VTKFile type=\"HyperTreeGrid\" compressor=\"vtkZLibDataCompressor\"></VTKFile>",
)
.unwrap();
assert!(Octree::<u16, usize>::read_htg(path).is_err());
}