@@ -178,3 +178,66 @@ TEST(DayTimeTest, GetTimeRefNegative)
178178 EXPECT_EQ (29 , m);
179179 EXPECT_EQ (45 , s);
180180}
181+
182+ TEST (DayTimeTest, NegativeHoursPositiveMinutesSeconds)
183+ {
184+ // (-2, 31, 18): sign from hours only, abs on hours, minutes/seconds as-is
185+ // totalSeconds = -1 * ((60*2 + 31)*60 + 18) = -9078
186+ // getTime: labs(9078) => h=2, m=31, s=18, h*=sign(-9078)=-1 => (-2, 31, 18)
187+ DayTime dt (-2 , 31 , 18 );
188+ EXPECT_EQ (-2 , dt.getHours ());
189+ EXPECT_EQ (31 , dt.getMinutes ());
190+ EXPECT_EQ (18 , dt.getSeconds ());
191+ }
192+
193+ TEST (DayTimeTest, NegativeTotalMinutes)
194+ {
195+ // (-2, 45, 0): totalSeconds = -1 * ((60*2 + 45)*60 + 0) = -9900
196+ // getTotalMinutes() = -9900 / 60 = -165
197+ DayTime dt (-2 , 45 , 0 );
198+ EXPECT_EQ (-165 .0f , dt.getTotalMinutes ());
199+ EXPECT_EQ (-2 , dt.getHours ());
200+ EXPECT_EQ (45 , dt.getMinutes ());
201+ EXPECT_EQ (0 , dt.getSeconds ());
202+ }
203+
204+ TEST (DayTimeTest, SetFromOther)
205+ {
206+ DayTime dt1 (5 , 30 , 15 );
207+ DayTime dt2;
208+ dt2.set (dt1);
209+ EXPECT_EQ (5 , dt2.getHours ());
210+ EXPECT_EQ (30 , dt2.getMinutes ());
211+ EXPECT_EQ (15 , dt2.getSeconds ());
212+ }
213+
214+ TEST (DayTimeTest, FormatStringExplicitSign)
215+ {
216+ // Exercises the {+} macro: outputs '+' (or '-' if degs < 0)
217+ DayTime dt (5 , 30 , 15 );
218+ char buf[32 ];
219+ dt.formatString (buf, " {+}{d}:{m}:{s}" );
220+ // {+} emits '+' since degs >= 0, then {d} copies achDegs = "+05"
221+ EXPECT_EQ (' +' , buf[0 ]);
222+ EXPECT_NE (' \0 ' , buf[1 ]);
223+ }
224+
225+ TEST (DayTimeTest, FormatStringCustomSecs)
226+ {
227+ // Custom seconds pointer bypasses totalSeconds, enabling 100+ degs
228+ DayTime dt;
229+ char buf[32 ];
230+ long customSecs = 100L * 3600L + 30L * 60L + 15L ; // 100h 30m 15s
231+ dt.formatString (buf, " {d}:{m}:{s}" , &customSecs);
232+ EXPECT_STREQ (" +100:30:15" , buf);
233+ }
234+
235+ TEST (DayTimeTest, FormatStringCustomSecsNegative)
236+ {
237+ // Negative custom seconds — sgn='-', degs=100 (labs)
238+ DayTime dt;
239+ char buf[32 ];
240+ long customSecs = -(100L * 3600L + 30L * 60L + 15L );
241+ dt.formatString (buf, " {d}:{m}:{s}" , &customSecs);
242+ EXPECT_STREQ (" -100:30:15" , buf);
243+ }
0 commit comments