1- #[ derive( PartialEq , Eq , Debug ) ]
2- pub enum PresentValueError {
1+ #[ derive( PartialEq , Eq , Debug ) ]
2+ pub enum PresentValueError {
33 NegetiveDiscount ,
4- EmptyCashFlow
4+ EmptyCashFlow ,
55}
66
7-
87pub fn present_value ( discount_rate : f64 , cash_flows : Vec < f64 > ) -> Result < f64 , PresentValueError > {
98 if discount_rate < 0.0 {
109 return Err ( PresentValueError :: NegetiveDiscount ) ;
@@ -13,7 +12,9 @@ pub fn present_value(discount_rate: f64, cash_flows: Vec<f64>) -> Result<f64, Pr
1312 return Err ( PresentValueError :: EmptyCashFlow ) ;
1413 }
1514
16- let present_value = cash_flows. iter ( ) . enumerate ( )
15+ let present_value = cash_flows
16+ . iter ( )
17+ . enumerate ( )
1718 . map ( |( i, & cash_flow) | cash_flow / ( 1.0 + discount_rate) . powi ( i as i32 ) )
1819 . sum :: < f64 > ( ) ;
1920
@@ -26,27 +27,43 @@ mod tests {
2627
2728 #[ test]
2829 fn test_present_value ( ) {
30+ assert_eq ! (
31+ 4.69 ,
32+ present_value( 0.13 , vec![ 10.0 , 20.70 , -293.0 , 297.0 ] ) . unwrap( )
33+ ) ;
2934
30- assert_eq ! ( 4.69 , present_value( 0.13 , vec![ 10.0 , 20.70 , -293.0 , 297.0 ] ) . unwrap( ) ) ;
31-
32- assert_eq ! ( -42739.63 , present_value( 0.07 , vec![ -109129.39 , 30923.23 , 15098.93 , 29734.0 , 39.0 ] ) . unwrap( ) ) ;
35+ assert_eq ! (
36+ -42739.63 ,
37+ present_value( 0.07 , vec![ -109129.39 , 30923.23 , 15098.93 , 29734.0 , 39.0 ] ) . unwrap( )
38+ ) ;
3339
34- assert_eq ! ( 175519.15 , present_value( 0.07 , vec![ 109129.39 , 30923.23 , 15098.93 , 29734.0 , 39.0 ] ) . unwrap( ) ) ;
40+ assert_eq ! (
41+ 175519.15 ,
42+ present_value( 0.07 , vec![ 109129.39 , 30923.23 , 15098.93 , 29734.0 , 39.0 ] ) . unwrap( )
43+ ) ;
3544 }
3645
3746 #[ test]
3847 fn test_present_value_negative_discount_rate ( ) {
39- assert_eq ! ( PresentValueError :: NegetiveDiscount , present_value( -1.0 , vec![ 10.0 , 20.70 , -293.0 , 297.0 ] ) . unwrap_err( ) ) ;
40-
48+ assert_eq ! (
49+ PresentValueError :: NegetiveDiscount ,
50+ present_value( -1.0 , vec![ 10.0 , 20.70 , -293.0 , 297.0 ] ) . unwrap_err( )
51+ ) ;
4152 }
4253
4354 #[ test]
4455 fn test_present_value_empty_cash_flow ( ) {
45- assert_eq ! ( PresentValueError :: EmptyCashFlow , present_value( 1.0 , vec![ ] ) . unwrap_err( ) ) ;
56+ assert_eq ! (
57+ PresentValueError :: EmptyCashFlow ,
58+ present_value( 1.0 , vec![ ] ) . unwrap_err( )
59+ ) ;
4660 }
4761
4862 #[ test]
4963 fn test_present_value_zero_discount_rate ( ) {
50- assert_eq ! ( 184924.55 , present_value( 0.0 , vec![ 109129.39 , 30923.23 , 15098.93 , 29734.0 , 39.0 ] ) . unwrap( ) ) ;
64+ assert_eq ! (
65+ 184924.55 ,
66+ present_value( 0.0 , vec![ 109129.39 , 30923.23 , 15098.93 , 29734.0 , 39.0 ] ) . unwrap( )
67+ ) ;
5168 }
5269}
0 commit comments