rust_finprim/amort_dep_tax/
mod.rs

1//! This module provides functions related to loan/mortgage amortization, depreciation, and tax calculations.
2
3// Structs
4mod structs;
5pub use structs::{AmortizationPeriod, DepreciationPeriod};
6
7// Amortization
8mod amort;
9#[cfg(feature = "std")]
10pub use amort::amort_schedule;
11pub use amort::amort_schedule_into;
12
13// Depreciation
14mod dep;
15#[cfg(feature = "std")]
16pub use dep::{db, macrs, sln, syd};
17pub use dep::{db_into, macrs_into, sln_into, syd_into};
18
19// Tax
20mod tax;
21pub use tax::{progressive_tax, progressive_tax_unchecked};
22
23#[cfg(feature = "serde")]
24#[cfg(test)]
25mod tests {
26    use super::*;
27
28    #[cfg(not(feature = "std"))]
29    extern crate std;
30    #[cfg(not(feature = "std"))]
31    use std::{assert, assert_eq, println, vec};
32
33    #[test]
34    fn test_serde() {
35        let period: AmortizationPeriod<f64> = AmortizationPeriod::new(1, 100.0, 50.0, 850.0);
36        let serialized = serde_json::to_string(&period).unwrap();
37        let deserialized: AmortizationPeriod<f64> = serde_json::from_str(&serialized).unwrap();
38        assert_eq!(period, deserialized);
39        let clone = period.clone();
40        assert_eq!(period, clone);
41
42        let dep_period: DepreciationPeriod<f64> = DepreciationPeriod::new(1, 100.0, 900.0);
43        let serialized = serde_json::to_string(&dep_period).unwrap();
44        let deserialized: DepreciationPeriod<f64> = serde_json::from_str(&serialized).unwrap();
45        assert_eq!(dep_period, deserialized);
46        let clone = dep_period.clone();
47        assert_eq!(dep_period, clone);
48    }
49}