#[test]
fn test_normal_octahedron_transform_encoding() {
use draco_core::prediction_scheme::{
PredictionSchemeEncodingTransform, PredictionSchemeTransformType,
};
use draco_core::prediction_scheme_normal_octahedron_canonicalized_encoding_transform::PredictionSchemeNormalOctahedronCanonicalizedEncodingTransform;
let mut transform = PredictionSchemeNormalOctahedronCanonicalizedEncodingTransform::new(1023);
assert_eq!(
transform.get_type(),
PredictionSchemeTransformType::NormalOctahedronCanonicalized
);
transform.set_canonicalized(false);
assert_eq!(
transform.get_type(),
PredictionSchemeTransformType::NormalOctahedron
);
transform.set_canonicalized(true);
let orig2 = [1022, 511];
let pred2 = [1022, 1022];
let mut corr2 = [0i32; 2];
transform.compute_correction(&orig2, &pred2, &mut corr2);
println!(
"Point 2: orig={:?}, pred={:?}, corr={:?}",
orig2, pred2, corr2
);
let orig1 = [1022, 1022];
let pred1 = [511, 511];
let mut corr1 = [0i32; 2];
transform.compute_correction(&orig1, &pred1, &mut corr1);
println!(
"Point 1: orig={:?}, pred={:?}, corr={:?}",
orig1, pred1, corr1
);
let orig0 = [511, 511];
let pred0 = [0, 0];
let mut corr0 = [0i32; 2];
transform.compute_correction(&orig0, &pred0, &mut corr0);
println!(
"Point 0: orig={:?}, pred={:?}, corr={:?}",
orig0, pred0, corr0
);
}
#[test]
fn test_normal_octahedron_transform_decoding() {
use draco_core::decoder_buffer::DecoderBuffer;
use draco_core::prediction_scheme::PredictionSchemeDecodingTransform;
use draco_core::prediction_scheme_normal_octahedron_canonicalized_decoding_transform::PredictionSchemeNormalOctahedronCanonicalizedDecodingTransform;
let mut transform = PredictionSchemeNormalOctahedronCanonicalizedDecodingTransform::new();
let mut buffer = DecoderBuffer::new(&[
0xFF, 0x03, 0x00, 0x00, 0xFF, 0x01, 0x00, 0x00, ]);
assert!(transform.decode_transform_data(&mut buffer));
let pred0 = [0, 0];
let corr0 = [511, 511];
let mut out0 = [0i32; 2];
transform.compute_original_value(&pred0, &corr0, &mut out0);
println!(
"Decoded Point 0: pred={:?}, corr={:?}, out={:?}",
pred0, corr0, out0
);
let pred1 = out0;
let corr1 = [511, 511];
let mut out1 = [0i32; 2];
transform.compute_original_value(&pred1, &corr1, &mut out1);
println!(
"Decoded Point 1: pred={:?}, corr={:?}, out={:?}",
pred1, corr1, out1
);
let pred2 = out1;
let corr2 = [511, 0];
let mut out2 = [0i32; 2];
transform.compute_original_value(&pred2, &corr2, &mut out2);
println!(
"Decoded Point 2: pred={:?}, corr={:?}, out={:?}",
pred2, corr2, out2
);
assert_eq!(out0, [511, 511], "Point 0 should be (511, 511)");
assert_eq!(out1, [1022, 1022], "Point 1 should be (1022, 1022)");
assert_eq!(out2, [1022, 511], "Point 2 should be (1022, 511)");
}