diff --git a/onlinejudge/service/atcoder.py b/onlinejudge/service/atcoder.py
index e558f24..48903f1 100644
--- a/onlinejudge/service/atcoder.py
+++ b/onlinejudge/service/atcoder.py
@@ -542,10 +542,10 @@ def _from_table_row(cls, tr: bs4.Tag, *, session: requests.Session, response: re
time_limit_msec = int(float(utils.remove_suffix(tds[2].text, ' sec')) * 1000)
else:
assert False
- if tds[3].text.endswith(' KB'):
- memory_limit_byte = int(float(utils.remove_suffix(tds[3].text, ' KB')) * 1000)
- elif tds[3].text.endswith(' MB'):
- memory_limit_byte = int(float(utils.remove_suffix(tds[3].text, ' MB')) * 1000 * 1000) # TODO: confirm this is MB truly, not MiB
+ if tds[3].text.endswith(' KiB'):
+ memory_limit_byte = int(float(utils.remove_suffix(tds[3].text, ' KiB')) * 1024)
+ elif tds[3].text.endswith(' MiB'):
+ memory_limit_byte = int(float(utils.remove_suffix(tds[3].text, ' MiB')) * 1024 * 1024) # TODO: confirm this is MB truly, not MiB
else:
assert False
if len(tds) == 5:
@@ -583,15 +583,15 @@ def _from_html(cls, html: bytes, *, problem: 'AtCoderProblem', session: Optional
assert False
# When login as the admin, a link is added after memory limit. See https://github.com/online-judge-tools/api-client/issues/90
- parsed_memory_limit = re.search(r'^(メモリ制限|Memory Limit): ([0-9.]+) (KB|MB)', memory_limit)
+ parsed_memory_limit = re.search(r'^(メモリ制限|Memory Limit): ([0-9.]+) (KiB|MiB)', memory_limit)
assert parsed_memory_limit
memory_limit_value = parsed_memory_limit.group(2)
memory_limit_unit = parsed_memory_limit.group(3)
- if memory_limit_unit == 'KB':
- memory_limit_byte = int(float(memory_limit_value) * 1000)
- elif memory_limit_unit == 'MB':
- memory_limit_byte = int(float(memory_limit_value) * 1000 * 1000)
+ if memory_limit_unit == 'KiB':
+ memory_limit_byte = int(float(memory_limit_value) * 1024)
+ elif memory_limit_unit == 'MiB':
+ memory_limit_byte = int(float(memory_limit_value) * 1024 * 1024)
else:
assert False
@@ -1160,7 +1160,7 @@ def _from_table_row(cls, tr: bs4.Tag, *, session: requests.Session, response: re
status = tds[6].text
if len(tds) == 10:
exec_time_msec = int(utils.remove_suffix(tds[7].text, ' ms')) # type: Optional[int]
- memory_byte = int(utils.remove_suffix(tds[8].text, ' KB')) * 1000 # type: Optional[int]
+ memory_byte = int(utils.remove_suffix(tds[8].text, ' KiB')) * 1024 # type: Optional[int]
else:
exec_time_msec = None
memory_byte = None
diff --git a/onlinejudge_api/get_problem.py b/onlinejudge_api/get_problem.py
index f357ff8..9d7fdec 100644
--- a/onlinejudge_api/get_problem.py
+++ b/onlinejudge_api/get_problem.py
@@ -67,7 +67,7 @@
},
"memoryLimit": {
"type": "integer",
- "description": "in megabytes (MB), not in mebibytes (MiB); Decimals are truncated for compatibility to competitive-companion",
+ "description": "in mebibytes (MiB), not in megabytes (MB); Decimals are truncated for compatibility to competitive-companion",
},
"timeLimit": {
"type": "integer",
@@ -316,7 +316,7 @@ def main(problem: Problem, *, is_system: bool, is_compatibility: bool, is_full:
},
"alphabet": data.alphabet,
}
- result["memoryLimit"] = data.memory_limit_byte // 1000 // 1000
+ result["memoryLimit"] = data.memory_limit_byte // 1024 // 1024
result["timeLimit"] = data.time_limit_msec
if is_full:
result["raw"] = {
diff --git a/tests/service_atcoder.py b/tests/service_atcoder.py
index e7a1b1d..924c2fc 100644
--- a/tests/service_atcoder.py
+++ b/tests/service_atcoder.py
@@ -84,7 +84,7 @@ def test_list_problems(self):
time.sleep(0.5)
self.assertEqual(problems[0].download_data().time_limit_msec, 2000)
time.sleep(0.5)
- self.assertEqual(problems[0].download_data().memory_limit_byte, 1024 * 1000 * 1000)
+ self.assertEqual(problems[0].download_data().memory_limit_byte, 1024 * 1024 * 1024)
time.sleep(0.5)
self.assertEqual(problems[5].download_data().alphabet, 'F')
time.sleep(0.5)
@@ -106,11 +106,11 @@ def test_list_problems_with_float_values(self):
time.sleep(0.5)
self.assertEqual(problems[0].download_data().time_limit_msec, 2525)
time.sleep(0.5)
- self.assertEqual(problems[0].download_data().memory_limit_byte, 246 * 1000 * 1000)
+ self.assertEqual(problems[0].download_data().memory_limit_byte, 246 * 1024 * 1024)
time.sleep(0.5)
self.assertEqual(problems[1].download_data().time_limit_msec, 5252)
time.sleep(0.5)
- self.assertEqual(problems[1].download_data().memory_limit_byte, 512 * 1000 * 1000)
+ self.assertEqual(problems[1].download_data().memory_limit_byte, 512 * 1024 * 1024)
def test_list_problems_time_limit_is_less_than_msec(self):
contest = AtCoderContest.from_url('https://atcoder.jp/contests/joi2019ho')
@@ -132,9 +132,9 @@ def test_list_problems_memory_limit_is_zero(self):
time.sleep(0.5)
problems = contest.list_problems()
time.sleep(0.5)
- self.assertEqual(problems[0].download_data().memory_limit_byte, 1024 * 1000 * 1000) # 1024 MB
+ self.assertEqual(problems[0].download_data().memory_limit_byte, 1024 * 1024 * 1024) # 1024 MiB
time.sleep(0.5)
- self.assertEqual(problems[1].download_data().memory_limit_byte, 0) # 0 KB
+ self.assertEqual(problems[1].download_data().memory_limit_byte, 0) # 0 KiB
@unittest.skip('Breaking change in AtCoder')
def test_iterate_submissions(self):
@@ -195,7 +195,7 @@ def test_load_details(self):
self.assertEqual(data.alphabet, 'A')
self.assertEqual(data.name, 'B +/- A')
self.assertEqual(data.time_limit_msec, 2000)
- self.assertEqual(data.memory_limit_byte, 1024 * 1000 * 1000)
+ self.assertEqual(data.memory_limit_byte, 1024 * 1024 * 1024)
self.assertEqual(data.score, 100)
def test_get_alphabet(self):
@@ -259,7 +259,7 @@ def test_from_html_very_old(self):
self.assertEqual(data.available_languages, None)
self.assertEqual(data.html, html)
self.assertEqual(data.input_format, None)
- self.assertEqual(data.memory_limit_byte, 292 * 1000 * 1000)
+ self.assertEqual(data.memory_limit_byte, 292 * 1024 * 1024)
self.assertEqual(data.name, 'プログラミングコンテスト')
self.assertEqual(data.problem, AtCoderProblem.from_url(url))
self.assertEqual(data.sample_cases, [
@@ -281,7 +281,7 @@ def test_from_html_old(self):
self.assertEqual(data.available_languages, None)
self.assertEqual(data.html, html)
self.assertEqual(data.input_format, '\r\nR C\r\nX Y\r\nD L\r\n')
- self.assertEqual(data.memory_limit_byte, 64 * 1000 * 1000)
+ self.assertEqual(data.memory_limit_byte, 64 * 1024 * 1024)
self.assertEqual(data.name, 'AtCoder社の冬')
self.assertEqual(data.problem, AtCoderProblem.from_url(url))
self.assertEqual(data.sample_cases, [
@@ -304,7 +304,7 @@ def test_from_html_standard(self):
self.assertEqual(data.available_languages, None)
self.assertEqual(data.html, html)
self.assertEqual(data.input_format, 'N\r\n')
- self.assertEqual(data.memory_limit_byte, 1024 * 1000 * 1000)
+ self.assertEqual(data.memory_limit_byte, 1024 * 1024 * 1024)
self.assertEqual(data.name, '756')
self.assertEqual(data.problem, AtCoderProblem.from_url(url))
self.assertEqual(data.sample_cases, [
@@ -326,7 +326,7 @@ def test_from_html_with_empty_output(self):
self.assertEqual(data.available_languages, None)
self.assertEqual(data.html, html)
self.assertEqual(data.input_format, 'N K\r\nA_0 A_1 \\cdots A_{N-1}\r\n')
- self.assertEqual(data.memory_limit_byte, 1024 * 1000 * 1000)
+ self.assertEqual(data.memory_limit_byte, 1024 * 1024 * 1024)
self.assertEqual(data.name, 'Do Not Duplicate')
self.assertEqual(data.problem, AtCoderProblem.from_url(url))
self.assertEqual(data.sample_cases, [
@@ -349,7 +349,7 @@ def test_from_html_without_sample_cases(self):
self.assertEqual(data.available_languages, None)
self.assertEqual(data.html, html)
self.assertEqual(data.input_format, None)
- self.assertEqual(data.memory_limit_byte, 64 * 1000 * 1000)
+ self.assertEqual(data.memory_limit_byte, 64 * 1024 * 1024)
self.assertEqual(data.name, '天下一株式会社採用情報')
self.assertEqual(data.problem, AtCoderProblem.from_url(url))
self.assertEqual(data.sample_cases, [])
@@ -367,7 +367,7 @@ def test_from_html_issue_414(self):
self.assertEqual(data.available_languages, None)
self.assertEqual(data.html, html)
self.assertEqual(data.input_format, None)
- self.assertEqual(data.memory_limit_byte, 256 * 1000 * 1000)
+ self.assertEqual(data.memory_limit_byte, 256 * 1024 * 1024)
self.assertEqual(data.name, 'Graph Cut')
self.assertEqual(data.problem, AtCoderProblem.from_url(url))
self.assertEqual(data.sample_cases, [