36 lines
946 B
Rust
36 lines
946 B
Rust
use super::Float;
|
|
|
|
#[derive(PartialEq, Debug, Copy, Clone)]
|
|
pub struct Mat2<T: Float> {
|
|
pub elements: [[T; 2]; 2],
|
|
}
|
|
|
|
impl<T: Float> Mat2<T> {
|
|
pub fn new(m00: T, m01: T, m10: T, m11: T) -> Mat2<T> {
|
|
Mat2 {
|
|
elements: [[m00, m01], [m10, m11]],
|
|
}
|
|
}
|
|
|
|
pub fn determinant(&self) -> T {
|
|
self.elements[0][0] * self.elements[1][1] - self.elements[0][1] * self.elements[1][0]
|
|
}
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn determinant_returns_expected_value() {
|
|
let target1 = Mat2::new(1.0, 2.0, 3.0, 4.0);
|
|
let target2 = Mat2::new(1.0, -2.0, 3.0, 4.0);
|
|
let target3 = Mat2::new(1.0, 1.0, 1.0, 1.0);
|
|
let target4 = Mat2::new(21.0, 45.0, -16.0, 0.0);
|
|
assert!(target1.determinant() == -2.0);
|
|
assert!(target2.determinant() == 10.0);
|
|
assert!(target3.determinant() == 0.0);
|
|
assert!(target4.determinant() == 720.0);
|
|
}
|
|
}
|