Some checks failed
memory-limit / Build judge (push) Successful in 18s
memory-limit / Linux / gcc (push) Failing after 14s
memory-limit / Linux / clang (push) Failing after 15s
memory-limit / Windows / clang (push) Failing after 16s
memory-limit / Windows / msvc (push) Failing after 17s
36 lines
1.0 KiB
Plaintext
36 lines
1.0 KiB
Plaintext
// End-to-end check that memory_limit is actually enforced by the runner.
|
|
// The solution allocates N MiB (argv[1]) and touches every page.
|
|
//
|
|
// - "within_limit" allocates 16 MiB under a 256 MiB cap → expected PASS
|
|
// - "exceeds_limit" allocates 256 MiB under a 64 MiB cap → expected MLE
|
|
//
|
|
// The workflow runs judge --json and asserts these statuses via jq.
|
|
|
|
build "$CC -O2 -std=c11 -Wall -Wextra solution.c -o solution"
|
|
build_windows "if /I \"%CC%\"==\"msvc\" (cl /nologo /O2 /W3 solution.c /Fe:solution.exe) else (%CC% -O2 -std=c11 -Wall -Wextra solution.c -o solution.exe)"
|
|
|
|
binary = "solution"
|
|
timeout 10s
|
|
|
|
normalize_crlf = true
|
|
|
|
group("within_limit") {
|
|
weight = 1.0
|
|
memory_limit = 256M
|
|
|
|
test("allocate_16mb") {
|
|
args = ["16"]
|
|
stdout = "ok 16\n"
|
|
}
|
|
}
|
|
|
|
group("exceeds_limit") {
|
|
weight = 0.0 // score doesn't matter — we assert the status in CI
|
|
memory_limit = 64M
|
|
|
|
test("allocate_256mb") {
|
|
args = ["256"]
|
|
// no stdout matcher: process is expected to be killed before it prints
|
|
}
|
|
}
|