34 lines
913 B
Rust
34 lines
913 B
Rust
#[derive(PartialEq, Debug, Copy, Clone)]
|
|
pub struct Mat2 {
|
|
pub elements: [[f64; 2]; 2],
|
|
}
|
|
|
|
impl Mat2 {
|
|
pub fn new(m00: f64, m01: f64, m10: f64, m11: f64) -> Mat2 {
|
|
Mat2 {
|
|
elements: [[m00, m01], [m10, m11]],
|
|
}
|
|
}
|
|
|
|
pub fn determinant(&self) -> f64 {
|
|
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);
|
|
}
|
|
}
|