@@ -156,6 +156,7 @@ mod relative {
156156
157157 use gix_date:: time:: Sign ;
158158 use jiff:: { ToSpan , Zoned } ;
159+ use pretty_assertions:: assert_eq;
159160
160161 #[ test]
161162 fn large_offsets ( ) {
@@ -179,24 +180,40 @@ mod relative {
179180 #[ test]
180181 fn various ( ) {
181182 let now = SystemTime :: now ( ) ;
182- let two_weeks_ago = gix_date:: parse ( "2 weeks ago" , Some ( now) ) . unwrap ( ) ;
183- assert_eq ! ( Sign :: Plus , two_weeks_ago. sign) ;
184- assert_eq ! ( 0 , two_weeks_ago. offset) ;
185- let expected = Zoned :: try_from ( now)
186- . unwrap ( )
187- // account for the loss of precision when creating `Time` with seconds
188- . round (
189- jiff:: ZonedRound :: new ( )
190- . smallest ( jiff:: Unit :: Second )
191- . mode ( jiff:: RoundMode :: Trunc ) ,
192- )
193- . unwrap ( )
194- . saturating_sub ( 2 . weeks ( ) ) ;
195- assert_eq ! (
196- jiff:: Timestamp :: from_second( two_weeks_ago. seconds) . unwrap( ) ,
197- expected. timestamp( ) ,
198- "relative times differ"
199- ) ;
183+
184+ let cases = [
185+ ( "2 weeks ago" , 2 . weeks ( ) ) ,
186+ ( "14 weeks ago" , 14 . weeks ( ) ) ,
187+ ( "26 weeks ago" , 26 . weeks ( ) ) ,
188+ ( "38 weeks ago" , 38 . weeks ( ) ) ,
189+ ( "50 weeks ago" , 50 . weeks ( ) ) ,
190+ ( "20160 minutes ago" , 20_160 . minutes ( ) ) , // 2 weeks
191+ ( "141120 minutes ago" , 141_120 . minutes ( ) ) , // 14 weeks
192+ ( "262080 minutes ago" , 262_080 . minutes ( ) ) , // 26 weeks
193+ ( "383040 minutes ago" , 383_040 . minutes ( ) ) , // 38 weeks
194+ ( "504000 minutes ago" , 504_000 . minutes ( ) ) , // 50 weeks
195+ ] ;
196+
197+ let times = cases. map ( |( input, _) | gix_date:: parse ( input, Some ( now) ) . unwrap ( ) ) ;
198+
199+ assert_eq ! ( times. map( |_| Sign :: Plus ) , times. map( |time| time. sign) ) ;
200+ assert_eq ! ( times. map( |_| 0 ) , times. map( |time| time. offset) ) ;
201+
202+ let expected = cases. map ( |( _, span) | {
203+ Zoned :: try_from ( now)
204+ . unwrap ( )
205+ // account for the loss of precision when creating `Time` with seconds
206+ . round (
207+ jiff:: ZonedRound :: new ( )
208+ . smallest ( jiff:: Unit :: Second )
209+ . mode ( jiff:: RoundMode :: Trunc ) ,
210+ )
211+ . unwrap ( )
212+ . saturating_sub ( span)
213+ . timestamp ( )
214+ } ) ;
215+ let actual = times. map ( |time| jiff:: Timestamp :: from_second ( time. seconds ) . unwrap ( ) ) ;
216+ assert_eq ! ( actual, expected, "relative times differ" ) ;
200217 }
201218}
202219
0 commit comments