use super::super::MatQ;
use crate::traits::MatrixDimensions;
impl MatQ {
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 = MatQ::from_str(&format!("[[1/1, {}]]", i64::MIN)).unwrap();
let col = MatQ::from_str(&format!("[[1/1],[2/1],[{}/1],[4/1]]", 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 = MatQ::from_str(&format!("[[1, {}/1],[2, 3]]", i64::MIN)).unwrap();
let mat_2 = MatQ::from_str(&format!("[[1, {}, 3/3],[4/1, 5/1, 6/1]]", i64::MAX)).unwrap();
let mat_3 =
MatQ::from_str(&format!("[[1/1, {}/1],[2/1, 3/1],[4/1, 5/1]]", i64::MIN)).unwrap();
let mat_4 = MatQ::from_str("[[1/1, 0],[2, 0],[4, 0]]").unwrap();
let mat_5 = MatQ::from_str("[[1, 2/1, 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 = MatQ::from_str("[[1]]").unwrap();
let large = MatQ::from_str(&format!("[[{}/1]]", 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 = MatQ::from_str(&format!("[[1, {}]]", i64::MIN)).unwrap();
let col = MatQ::from_str(&format!("[[1],[{}],[3/1]]", i64::MIN)).unwrap();
let mat = MatQ::from_str("[[1/1, 2],[3, 4],[5, 6]]").unwrap();
assert!(!row.has_single_entry());
assert!(!col.has_single_entry());
assert!(!mat.has_single_entry());
}
}