@@ -65,4 +65,43 @@ public void ApproximateAge()
65
65
Assert . Equal ( "2 days ago" , DateTime . Now . AddHours ( - 48 ) . ToApproximateAgeString ( ) ) ;
66
66
Assert . Equal ( "1 week ago" , DateTime . Now . AddDays ( - 7 ) . ToApproximateAgeString ( ) ) ;
67
67
}
68
+
69
+ [ Fact ]
70
+ public void SubtractSaturating ( )
71
+ {
72
+ // Basic case: normal subtraction when result is positive
73
+ var timeSpan1 = TimeSpan . FromHours ( 5 ) ;
74
+ var timeSpan2 = TimeSpan . FromHours ( 2 ) ;
75
+ Assert . Equal ( TimeSpan . FromHours ( 3 ) , timeSpan1 . SubtractSaturating ( timeSpan2 ) ) ;
76
+
77
+ // Saturating case: result would be negative, should return TimeSpan.Zero
78
+ var timeSpan3 = TimeSpan . FromHours ( 2 ) ;
79
+ var timeSpan4 = TimeSpan . FromHours ( 5 ) ;
80
+ Assert . Equal ( TimeSpan . Zero , timeSpan3 . SubtractSaturating ( timeSpan4 ) ) ;
81
+
82
+ // Edge case: equal values should return TimeSpan.Zero
83
+ var timeSpan5 = TimeSpan . FromMinutes ( 30 ) ;
84
+ var timeSpan6 = TimeSpan . FromMinutes ( 30 ) ;
85
+ Assert . Equal ( TimeSpan . Zero , timeSpan5 . SubtractSaturating ( timeSpan6 ) ) ;
86
+
87
+ // Zero cases
88
+ Assert . Equal ( TimeSpan . FromSeconds ( 10 ) , TimeSpan . FromSeconds ( 10 ) . SubtractSaturating ( TimeSpan . Zero ) ) ;
89
+ Assert . Equal ( TimeSpan . Zero , TimeSpan . Zero . SubtractSaturating ( TimeSpan . FromSeconds ( 5 ) ) ) ;
90
+ Assert . Equal ( TimeSpan . Zero , TimeSpan . Zero . SubtractSaturating ( TimeSpan . Zero ) ) ;
91
+
92
+ // Large values
93
+ var largeTimeSpan1 = TimeSpan . FromDays ( 100 ) ;
94
+ var largeTimeSpan2 = TimeSpan . FromDays ( 50 ) ;
95
+ Assert . Equal ( TimeSpan . FromDays ( 50 ) , largeTimeSpan1 . SubtractSaturating ( largeTimeSpan2 ) ) ;
96
+
97
+ // Negative TimeSpan values - testing with negative self value
98
+ var negativeTimeSpan = TimeSpan . FromHours ( - 2 ) ;
99
+ var positiveTimeSpan = TimeSpan . FromHours ( 1 ) ;
100
+ Assert . Equal ( TimeSpan . Zero , negativeTimeSpan . SubtractSaturating ( positiveTimeSpan ) ) ;
101
+
102
+ // Negative other value (subtracting negative is like adding)
103
+ var timeSpan7 = TimeSpan . FromHours ( 3 ) ;
104
+ var negativeTimeSpan2 = TimeSpan . FromHours ( - 2 ) ;
105
+ Assert . Equal ( TimeSpan . FromHours ( 5 ) , timeSpan7 . SubtractSaturating ( negativeTimeSpan2 ) ) ;
106
+ }
68
107
}
0 commit comments