feat: method to check if Quantity is empty #58

Merged
realaravinth merged 1 commit from quantity-empty-check into master 2024-07-22 20:16:18 +05:30
2 changed files with 94 additions and 0 deletions
Showing only changes of commit 7b0492d926 - Show all commits

View file

@ -1 +1,5 @@
// SPDX-FileCopyrightText: 2024 Aravinth Manivannan <realaravinth@batsense.net>
//
// SPDX-License-Identifier: AGPL-3.0-or-later
pub mod quantity; pub mod quantity;

View file

@ -54,6 +54,12 @@ pub struct QuantityPart {
unit: QuantityUnit, unit: QuantityUnit,
} }
impl QuantityPart {
pub fn is_empty(&self) -> bool {
self.number == 0
}
}
#[derive( #[derive(
Clone, Default, Debug, Serialize, Deserialize, Eq, PartialEq, Ord, PartialOrd, Builder, Getters, Clone, Default, Debug, Serialize, Deserialize, Eq, PartialEq, Ord, PartialOrd, Builder, Getters,
)] )]
@ -62,10 +68,78 @@ pub struct Quantity {
major: QuantityPart, major: QuantityPart,
} }
impl Quantity {
pub fn is_empty(&self) -> bool {
self.minor.is_empty() == true && self.major.is_empty() == true
}
}
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
#[test]
fn quantity_part_empty() {
let q = QuantityPartBuilder::default()
.number(0)
.unit(QuantityUnit::DiscreteNumber)
.build()
.unwrap();
assert!(q.is_empty());
let q_not_empty = QuantityPartBuilder::default()
.number(1)
.unit(QuantityUnit::DiscreteNumber)
.build()
.unwrap();
assert!(!q_not_empty.is_empty());
}
#[test]
fn quantity_empty() {
let q = QuantityPartBuilder::default()
.number(0)
.unit(QuantityUnit::DiscreteNumber)
.build()
.unwrap();
let q_not_empty = QuantityPartBuilder::default()
.number(1)
.unit(QuantityUnit::DiscreteNumber)
.build()
.unwrap();
// not empty; major has items
assert!(!QuantityBuilder::default()
.minor(q.clone())
.major(q_not_empty.clone())
.build()
.unwrap()
.is_empty());
// not empty; minor has items
assert!(!QuantityBuilder::default()
.minor(q.clone())
.major(q_not_empty.clone())
.build()
.unwrap()
.is_empty());
// not empty; minor & major have items
assert!(!QuantityBuilder::default()
.minor(q_not_empty.clone())
.major(q_not_empty.clone())
.build()
.unwrap()
.is_empty());
// empty
assert!(QuantityBuilder::default()
.minor(q.clone())
.major(q)
.build()
.unwrap()
.is_empty());
}
fn test_helper<T>(t: T, str_value: &str) -> bool fn test_helper<T>(t: T, str_value: &str) -> bool
where where
T: ToString + FromStr + std::fmt::Debug + PartialEq, T: ToString + FromStr + std::fmt::Debug + PartialEq,
@ -105,4 +179,20 @@ mod tests {
fn quantity_unit_liter() { fn quantity_unit_liter() {
assert!(test_helper(QuantityUnit::Liter, LITER)); assert!(test_helper(QuantityUnit::Liter, LITER));
} }
impl Quantity {
pub fn get_quantity() -> Self {
let q = QuantityPartBuilder::default()
.number(1)
.unit(QuantityUnit::DiscreteNumber)
.build()
.unwrap();
QuantityBuilder::default()
.minor(q.clone())
.major(q.clone())
.build()
.unwrap()
}
}
} }