use super::super::MatZ;
use crate::traits::MatrixDimensions;
impl MatZ {
pub fn is_row_vector(&self) -> bool {
self.get_num_rows() == 1
}
pub fn is_column_vector(&self) -> bool {
self.get_num_columns() == 1
}
pub fn is_vector(&self) -> bool {
self.is_column_vector() || self.is_row_vector()
}
pub fn has_single_entry(&self) -> bool {
self.is_column_vector() && self.is_row_vector()
}
}
#[cfg(test)]
mod test_is_vector {
use super::*;
use std::str::FromStr;
#[test]
fn vectors_detected() {
let row = MatZ::from_str(&format!("[[1, {}]]", i64::MIN)).unwrap();
let col = MatZ::from_str(&format!("[[1],[2],[{}],[4]]", i64::MAX)).unwrap();
assert!(row.is_row_vector());
assert!(!row.is_column_vector());
assert!(row.is_vector());
assert!(!col.is_row_vector());
assert!(col.is_column_vector());
assert!(col.is_vector());
}
#[test]
fn non_vectors_detected() {
let mat_1 = MatZ::from_str(&format!("[[1, {}],[2, 3]]", i64::MIN)).unwrap();
let mat_2 = MatZ::from_str(&format!("[[1, {}, 3],[4, 5, 6]]", i64::MAX)).unwrap();
let mat_3 = MatZ::from_str(&format!("[[1, {}],[2, 3],[4, 5]]", i64::MIN)).unwrap();
let mat_4 = MatZ::from_str("[[1, 0],[2, 0],[4, 0]]").unwrap();
let mat_5 = MatZ::from_str("[[1, 2, 4],[0, 0, 0]]").unwrap();
assert!(!mat_1.is_column_vector());
assert!(!mat_1.is_row_vector());
assert!(!mat_1.is_vector());
assert!(!mat_2.is_column_vector());
assert!(!mat_2.is_row_vector());
assert!(!mat_2.is_vector());
assert!(!mat_3.is_column_vector());
assert!(!mat_3.is_row_vector());
assert!(!mat_3.is_vector());
assert!(!mat_4.is_column_vector());
assert!(!mat_4.is_row_vector());
assert!(!mat_4.is_vector());
assert!(!mat_5.is_column_vector());
assert!(!mat_5.is_row_vector());
assert!(!mat_5.is_vector());
}
#[test]
fn single_entry_detected() {
let small = MatZ::from_str("[[1]]").unwrap();
let large = MatZ::from_str(&format!("[[{}]]", i64::MIN)).unwrap();
assert!(small.has_single_entry());
assert!(large.has_single_entry());
assert!(small.is_row_vector());
assert!(small.is_column_vector());
assert!(small.is_vector());
assert!(large.is_row_vector());
assert!(large.is_column_vector());
assert!(large.is_vector());
}
#[test]
fn non_single_entry_detected() {
let row = MatZ::from_str(&format!("[[1, {}]]", i64::MIN)).unwrap();
let col = MatZ::from_str(&format!("[[1],[{}],[3]]", i64::MIN)).unwrap();
let mat = MatZ::from_str("[[1, 2],[3, 4],[5, 6]]").unwrap();
assert!(!row.has_single_entry());
assert!(!col.has_single_entry());
assert!(!mat.has_single_entry());
}
}