use ndarray_cg::IndexingRef;
use super::*;
fn test_debug_generic< D : the_module::mat::Descriptor >()
where
the_module::Mat< 0, 0, f32, D > : Default + the_module::RawSliceMut< Scalar = f32 > + the_module::IndexingRef< Scalar = f32 >,
the_module::Mat< 1, 1, f32, D > : Default + the_module::RawSliceMut< Scalar = f32 > + the_module::IndexingRef< Scalar = f32 >,
the_module::Mat< 2, 2, f32, D > : Default + the_module::RawSliceMut< Scalar = f32 > + the_module::IndexingRef< Scalar = f32 >,
the_module::Mat< 3, 3, f32, D > : Default + the_module::RawSliceMut< Scalar = f32 > + the_module::IndexingRef< Scalar = f32 >,
the_module::Mat< 2, 3, f32, D > : Default + the_module::RawSliceMut< Scalar = f32 > + the_module::IndexingRef< Scalar = f32 >,
{
use the_module::
{
Mat,
RawSliceMut,
};
use std::fmt;
let mat_0x0 = Mat::< 0, 0, f32, D >::default();
let expected_debug_output_0x0 = format!( "Mat {{ order : {} | Coordinate : {} }}\n",
if < D as the_module::mat::Descriptor >::IS_ROW_MAJOR { "row-major" } else { "column-major" },
if < D as the_module::mat::Descriptor >::IS_ORDINARY { "ordinary" } else { "homogenous" }
);
let debug_output_0x0 = format!( "{:?}", mat_0x0 );
assert_eq!( debug_output_0x0, expected_debug_output_0x0, "Debug output mismatch for 0x0 matrix" );
let mat_1x1 = Mat::< 1, 1, f32, D >::from_row_major( [ 1.0 ] );
let expected_debug_output_1x1 = format!( "Mat {{ order : {} | Coordinate : {} }}\n [ 1.0 ],\n",
if < D as the_module::mat::Descriptor >::IS_ROW_MAJOR { "row-major" } else { "column-major" },
if < D as the_module::mat::Descriptor >::IS_ORDINARY { "ordinary" } else { "homogenous" }
);
let debug_output_1x1 = format!( "{:?}", mat_1x1 );
assert_eq!( debug_output_1x1, expected_debug_output_1x1, "Debug output mismatch for 1x1 matrix" );
let mat_2x2 = Mat::< 2, 2, f32, D >::from_row_major( [ 1.0, 2.0, 3.0, 4.0 ] );
let expected_debug_output_2x2 = format!( "Mat {{ order : {} | Coordinate : {} }}\n [ 1.0, 2.0 ],\n [ 3.0, 4.0 ],\n",
if < D as the_module::mat::Descriptor >::IS_ROW_MAJOR { "row-major" } else { "column-major" },
if < D as the_module::mat::Descriptor >::IS_ORDINARY { "ordinary" } else { "homogenous" }
);
let debug_output_2x2 = format!( "{:?}", mat_2x2 );
assert_eq!( debug_output_2x2, expected_debug_output_2x2, "Debug output mismatch for 2x2 matrix" );
let mat_3x3 = Mat::< 3, 3, f32, D >::from_row_major( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0 ] );
let expected_debug_output_3x3 = format!( "Mat {{ order : {} | Coordinate : {} }}\n [ 1.0, 2.0, 3.0 ],\n [ 4.0, 5.0, 6.0 ],\n [ 7.0, 8.0, 9.0 ],\n",
if < D as the_module::mat::Descriptor >::IS_ROW_MAJOR { "row-major" } else { "column-major" },
if < D as the_module::mat::Descriptor >::IS_ORDINARY { "ordinary" } else { "homogenous" }
);
let debug_output_3x3 = format!( "{:?}", mat_3x3 );
assert_eq!( debug_output_3x3, expected_debug_output_3x3, "Debug output mismatch for 3x3 matrix" );
let mat_2x3 = Mat::< 2, 3, f32, D >::from_row_major( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] );
let expected_debug_output_2x3 = format!( "Mat {{ order : {} | Coordinate : {} }}\n [ 1.0, 2.0, 3.0 ],\n [ 4.0, 5.0, 6.0 ],\n",
if < D as the_module::mat::Descriptor >::IS_ROW_MAJOR { "row-major" } else { "column-major" },
if < D as the_module::mat::Descriptor >::IS_ORDINARY { "ordinary" } else { "homogenous" }
);
let debug_output_2x3 = format!( "{:?}", mat_2x3 );
assert_eq!( debug_output_2x3, expected_debug_output_2x3, "Debug output mismatch for 2x3 matrix" );
}
#[ test ]
fn test_debug_row_major()
{
use the_module::mat::DescriptorOrderRowMajor;
test_debug_generic::< DescriptorOrderRowMajor >();
}
#[ test ]
fn test_debug_column_major()
{
use the_module::mat::DescriptorOrderColumnMajor;
test_debug_generic::< DescriptorOrderColumnMajor >();
}
fn test_transpose_generic< D : the_module::mat::Descriptor >()
where
the_module::Mat< 2, 3, f32, D > : Default + std::cmp::PartialEq,
the_module::Mat< 3, 2, f32, D > : Default + std::cmp::PartialEq,
the_module::Mat< 2, 3, f32, D > : the_module::IndexingMut< Scalar = f32 >,
the_module::Mat< 3, 2, f32, D > : the_module::IndexingMut< Scalar = f32 >,
the_module::Mat< 2, 3, f32, D > : the_module::RawSliceMut< Scalar = f32 >,
the_module::Mat< 3, 2, f32, D > : the_module::RawSliceMut< Scalar = f32 >,
{
use the_module::
{
Mat,
RawSliceMut,
IndexingRef,
};
let mat = Mat::< 2, 3, f32, D >::default().set( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] );
let expected_transpose = Mat::< 3, 2, f32, D >::default().set( [ 1.0, 4.0, 2.0, 5.0, 3.0, 6.0 ] );
let transposed_mat = mat.transpose();
assert_eq!( transposed_mat, expected_transpose, "Transpose result mismatch" );
}
#[ test ]
fn test_transpose_row_major()
{
use the_module::mat::DescriptorOrderRowMajor;
test_transpose_generic::< DescriptorOrderRowMajor >();
}
#[ test ]
fn test_transpose_column_major()
{
use the_module::mat::DescriptorOrderColumnMajor;
test_transpose_generic::< DescriptorOrderColumnMajor >();
}