diff --git a/src/lib/exercises/src/hackerrank/warmup/time_conversion.cpp b/src/lib/exercises/src/hackerrank/warmup/time_conversion.cpp index a9f74c4..7c72f49 100644 --- a/src/lib/exercises/src/hackerrank/warmup/time_conversion.cpp +++ b/src/lib/exercises/src/hackerrank/warmup/time_conversion.cpp @@ -41,6 +41,10 @@ std::string timeConversion(const std::string &s) { int hour; hour_str >> hour; + if (hour < 0 || hour > 23) { + throw std::invalid_argument("Invalid hour value: " + std::to_string(hour)); + } + if (hour >= 12) { hour = 0; } @@ -51,7 +55,10 @@ std::string timeConversion(const std::string &s) { hour_str.str(""); hour_str.clear(); + // Validar que hour esté en un rango válido (0-23 para horas) + hour_str << std::setfill('0') << std::setw(2) << hour; + time[0] = hour_str.str(); std::string conversion; diff --git a/src/tests/unit/lib/hackerrank/warmup/test_conversion.test.cpp b/src/tests/unit/lib/hackerrank/warmup/test_conversion.test.cpp index d29460f..1c74b3a 100644 --- a/src/tests/unit/lib/hackerrank/warmup/test_conversion.test.cpp +++ b/src/tests/unit/lib/hackerrank/warmup/test_conversion.test.cpp @@ -36,3 +36,8 @@ TEST_CASE("time_conversion helper functions edge cases", CHECK(hackerrank::warmup::firstN("", 0) == ""); CHECK(hackerrank::warmup::lastN("", 0) == ""); } + +TEST_CASE("time_conversion invalid input", "[hackerrank] [invalid] [warmup]") { + CHECK_THROWS_AS(hackerrank::warmup::timeConversion("25:01:00AM"), + std::invalid_argument); +} diff --git a/src/tests/unit/lib/hackerrank/warmup/time_conversion.testcases.json b/src/tests/unit/lib/hackerrank/warmup/time_conversion.testcases.json index 16c374f..c4f4db4 100644 --- a/src/tests/unit/lib/hackerrank/warmup/time_conversion.testcases.json +++ b/src/tests/unit/lib/hackerrank/warmup/time_conversion.testcases.json @@ -1,4 +1,5 @@ [ { "input": "12:01:00PM", "expected": "12:01:00" }, - { "input": "12:01:00AM", "expected": "00:01:00" } + { "input": "12:01:00AM", "expected": "00:01:00" }, + { "input": "06:01:00PM", "expected": "18:01:00" } ]