Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 27 additions & 27 deletions oioioi/contests/tests/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -4904,30 +4904,30 @@ def __init__(self, timestamp, contest):
def test_stringify_limits(self):
raw_limits = {
"1": {
"default": (1000, 2000, 1000, 2000),
"cpp": (1000, 2000, 1000, 2000),
"py": (1000, 2000, 1000, 2000),
"default": (1000, 2000, 1024, 2048),
"cpp": (1000, 2000, 1024, 2048),
"py": (1000, 2000, 1024, 2048),
},
"2": {"default": (2000, 4000, 2000, 4000), "cpp": (1000, 3000, 1000, 4000), "py": (3000, 5000, 2000, 5000)},
"2": {"default": (2000, 4000, 2048, 4096), "cpp": (1000, 3000, 1024, 4096), "py": (3000, 5000, 2048, 5120)},
"3": {
"default": (1000, 2000, 1000, 2000),
"cpp": (500, 2000, 500, 1000),
"py": (1000, 3000, 1000, 3000),
"default": (1000, 2000, 1024, 2048),
"cpp": (500, 2000, 512, 1024),
"py": (1000, 3000, 1024, 3072),
},
"4": {
"default": (1000, 2000, 1000, 2000),
"cpp": (500, 2000, 2000, 3000),
"py": (1000, 2000, 1000, 2000),
"default": (1000, 2000, 1024, 2048),
"cpp": (500, 2000, 2048, 3072),
"py": (1000, 2000, 1024, 2048),
},
"5": {
"default": (1000, 2000, 1000, 2000),
"cpp": (1000, 2000, 1000, 2000),
"py": (3000, 4000, 1000, 3000),
"default": (1000, 2000, 1024, 2048),
"cpp": (1000, 2000, 1024, 2048),
"py": (3000, 4000, 1024, 3072),
},
"6": {
"default": (1000, 2000, 500, 2000),
"cpp": (100, 500, 100, 200),
"py": (1000, 2000, 500, 2000),
"default": (1000, 2000, 512, 2048),
"cpp": (100, 500, 128, 256),
"py": (1000, 2000, 512, 2048),
},
}

Expand All @@ -4937,49 +4937,49 @@ def test_stringify_limits(self):
self.assertEqual(len(stringified["1"]), 1)
self.assertEqual(stringified["1"][0][0], "")
self.assertEqual(stringified["1"][0][1], "1-2 s")
self.assertEqual(stringified["1"][0][2], "1-2 MB")
self.assertEqual(stringified["1"][0][2], "1-2 MiB")

# Test two simple overrides
self.assertEqual(len(stringified["2"]), 2)
self.assertEqual(stringified["2"][0][0], "C++:")
self.assertEqual(stringified["2"][0][1], "1-3 s")
self.assertEqual(stringified["2"][0][2], "1-4 MB")
self.assertEqual(stringified["2"][0][2], "1-4 MiB")
self.assertEqual(stringified["2"][1][0], "Python:")
self.assertEqual(stringified["2"][1][1], "3-5 s")
self.assertEqual(stringified["2"][1][2], "2-5 MB")
self.assertEqual(stringified["2"][1][2], "2-5 MiB")

# Test two overrides, one with small memory limit
self.assertEqual(len(stringified["3"]), 2)
self.assertEqual(stringified["3"][0][0], "C++:")
self.assertEqual(stringified["3"][0][1], "0.5-2 s")
self.assertEqual(stringified["3"][0][2], "500-1000 KiB")
self.assertEqual(stringified["3"][0][2], "512-1024 KiB")
self.assertEqual(stringified["3"][1][0], "Python:")
self.assertEqual(stringified["3"][1][1], "1-3 s")
self.assertEqual(stringified["3"][1][2], "1-3 MB")
self.assertEqual(stringified["3"][1][2], "1-3 MiB")

# Test one override, cpp
self.assertEqual(len(stringified["4"]), 2)
self.assertEqual(stringified["4"][0][0], "Default:")
self.assertEqual(stringified["4"][0][1], "1-2 s")
self.assertEqual(stringified["4"][0][2], "1-2 MB")
self.assertEqual(stringified["4"][0][2], "1-2 MiB")
self.assertEqual(stringified["4"][1][0], "C++:")
self.assertEqual(stringified["4"][1][1], "0.5-2 s")
self.assertEqual(stringified["4"][1][2], "2-3 MB")
self.assertEqual(stringified["4"][1][2], "2-3 MiB")

# Test one override, python
self.assertEqual(len(stringified["5"]), 2)
self.assertEqual(stringified["5"][0][0], "Default:")
self.assertEqual(stringified["5"][0][1], "1-2 s")
self.assertEqual(stringified["5"][0][2], "1-2 MB")
self.assertEqual(stringified["5"][0][2], "1-2 MiB")
self.assertEqual(stringified["5"][1][0], "Python:")
self.assertEqual(stringified["5"][1][1], "3-4 s")
self.assertEqual(stringified["5"][1][2], "1-3 MB")
self.assertEqual(stringified["5"][1][2], "1-3 MiB")

# Test small memory limits
self.assertEqual(len(stringified["6"]), 2)
self.assertEqual(stringified["6"][0][0], "Default:")
self.assertEqual(stringified["6"][0][1], "1-2 s")
self.assertEqual(stringified["6"][0][2], "500-2000 KiB")
self.assertEqual(stringified["6"][0][2], "512-2048 KiB")
self.assertEqual(stringified["6"][1][0], "C++:")
self.assertEqual(stringified["6"][1][1], "0.1-0.5 s")
self.assertEqual(stringified["6"][1][2], "100-200 KiB")
self.assertEqual(stringified["6"][1][2], "128-256 KiB")
28 changes: 19 additions & 9 deletions oioioi/contests/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -819,23 +819,33 @@ def stringify_problems_limits(raw_limits):
- For mixed limits (one language differs): (('Default:', time_limit, memory_limit), language_limits)
"""

def KiB_to_MB(KiBs):
return (KiBs * 1024) // 1000000
def KiB_to_MiB(KiBs):
return (KiBs) // 1024

def ms_to_seconds(ms: int) -> str:
seconds: int = ms // 1000
ms %= 1000
if ms == 0:
return str(seconds)
return f"{seconds}.{str(ms).rjust(3, '0').rstrip('0')}"

def format_limits(pi_limits):
time_lower = f"{pi_limits[0] / 1000:.1g}"
time_higher = f"{pi_limits[1] / 1000:.1g}"
lower_ms = pi_limits[0]
higher_ms = pi_limits[1]

time_lower = ms_to_seconds(lower_ms)
time_higher = ms_to_seconds(higher_ms)

time_limit = f"{time_lower} s" if time_lower == time_higher else f"{time_lower}-{time_higher} s"
time_limit = f"{time_lower} s" if lower_ms == higher_ms else f"{time_lower}-{time_higher} s"

if pi_limits[2] < 1000000 / 1024: # lower memory limit is smaller than 1MB, display KiB
if pi_limits[2] < 1024: # lower memory limit is smaller than 1MiB, display KiB
unit = "KiB"
memory_lower = pi_limits[2]
memory_higher = pi_limits[3]
else:
unit = "MB"
memory_lower = KiB_to_MB(pi_limits[2])
memory_higher = KiB_to_MB(pi_limits[3])
unit = "MiB"
memory_lower = KiB_to_MiB(pi_limits[2])
memory_higher = KiB_to_MiB(pi_limits[3])

memory_limit = f"{memory_lower} {unit}" if memory_lower == memory_higher else f"{memory_lower}-{memory_higher} {unit}"

Expand Down