Skip to content

Commit 9df89b6

Browse files
committed
add memory usage tests
1 parent 995f51d commit 9df89b6

4 files changed

Lines changed: 93 additions & 0 deletions

File tree

tests/python/tests/memory_usage/__init__.py

Whitespace-only changes.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
entry: script
2+
components:
3+
script:
4+
image: KPHP
5+
scope: Request
6+
args: {}
7+
links: {}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?php
2+
3+
function memory_work() {
4+
$a = "a";
5+
6+
$n = 1e6;
7+
for ($i = 1; $i < $n; ++$i) {
8+
$a .= "a";
9+
}
10+
11+
return $a;
12+
}
13+
14+
function test_memory_usage() {
15+
$base_usage = memory_get_usage(false);
16+
17+
$a = memory_work();
18+
19+
var_dump(memory_get_usage(false) - $base_usage);
20+
21+
unset($a);
22+
23+
var_dump(memory_get_usage(false) - $base_usage);
24+
var_dump(memory_get_peak_usage(false) - $base_usage);
25+
}
26+
27+
function test_total_memory_usage() {
28+
$base_usage = memory_get_total_usage();
29+
30+
$a = memory_work();
31+
32+
var_dump(memory_get_total_usage() - $base_usage);
33+
34+
unset($a);
35+
36+
var_dump(memory_get_total_usage() - $base_usage);
37+
var_dump(memory_get_peak_usage(true) - $base_usage);
38+
}
39+
40+
switch($_SERVER["PHP_SELF"]) {
41+
case "/test_memory_usage":
42+
test_memory_usage();
43+
break;
44+
case "/test_total_memory_usage":
45+
test_total_memory_usage();
46+
break;
47+
default:
48+
critical_error('unexpected "' . $_SERVER["PHP_SELF"] . '"');
49+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import pytest
2+
3+
from python.lib.testcase import WebServerAutoTestCase
4+
5+
6+
class TestMemoryUsage(WebServerAutoTestCase):
7+
def _template(self, test_case: str, expected_usage: int, expected_usage_after_unset: int, expected_peak_usage: int):
8+
response = self.web_server.http_post(f"/{test_case}")
9+
self.assertEqual(response.status_code, 200)
10+
self.assertEqual(
11+
response.text,
12+
"".join(
13+
f"int({memory_usage})\n"
14+
for memory_usage in [expected_usage, expected_usage_after_unset, expected_peak_usage]
15+
),
16+
)
17+
18+
def test_memory_usage(self):
19+
self._template("test_memory_usage", 2**20, 0, 2**19 + 2**20)
20+
21+
@pytest.mark.k2_skip
22+
def test_total_memory_usage_kphp(self):
23+
self._template(
24+
"test_total_memory_usage",
25+
48 + sum(2**n for n in range(12, 21)),
26+
48 + sum(2**n for n in range(12, 20)),
27+
48 + sum(2**n for n in range(12, 21)),
28+
)
29+
30+
@pytest.mark.kphp_skip
31+
def test_total_memory_usage_k2(self):
32+
self._template(
33+
"test_total_memory_usage",
34+
96 + sum(2**n for n in range(12, 21)),
35+
96 + sum(2**n for n in range(12, 20)),
36+
96 + sum(2**n for n in range(12, 21)),
37+
)

0 commit comments

Comments
 (0)