Skip to content

Commit 5c675b8

Browse files
test: Add tests for negative time handling and custom formatting in DayTime class
1 parent 2e07557 commit 5c675b8

1 file changed

Lines changed: 63 additions & 0 deletions

File tree

unit_tests/test_core/types/test_daytime.cpp

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)