Skip to content

Commit 69410d4

Browse files
committed
test(psram): Add PSRAM test
1 parent 8ce5f77 commit 69410d4

File tree

3 files changed

+135
-0
lines changed

3 files changed

+135
-0
lines changed

Diff for: tests/validation/psram/ci.json

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
{
2+
"fqbn": {
3+
"esp32": [
4+
"espressif:esp32:esp32:PSRAM=enabled"
5+
],
6+
"esp32s2": [
7+
"espressif:esp32:esp32s2:PSRAM=enabled"
8+
],
9+
"esp32s3": [
10+
"espressif:esp32:esp32s3:PSRAM=opi,USBMode=default",
11+
"espressif:esp32:esp32s3:PSRAM=enabled,USBMode=default"
12+
]
13+
},
14+
"platforms": {
15+
"qemu": false,
16+
"wokwi": false
17+
},
18+
"requires": [
19+
"CONFIG_SPIRAM=y"
20+
],
21+
"targets": {
22+
"esp32c3": false,
23+
"esp32c6": false,
24+
"esp32h2": false
25+
}
26+
}

Diff for: tests/validation/psram/psram.ino

+107
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
#include <Arduino.h>
2+
#include <unity.h>
3+
4+
#define MAX_TEST_SIZE 512 * 1024 // 512KB
5+
6+
void *buf = NULL;
7+
8+
void test_malloc_success(void) {
9+
buf = ps_malloc(MAX_TEST_SIZE);
10+
TEST_ASSERT_NOT_NULL(buf);
11+
free(buf);
12+
buf = NULL;
13+
}
14+
15+
void test_calloc_success(void) {
16+
buf = ps_calloc(MAX_TEST_SIZE, 1);
17+
TEST_ASSERT_NOT_NULL(buf);
18+
free(buf);
19+
buf = NULL;
20+
}
21+
22+
void test_realloc_success(void) {
23+
buf = ps_malloc(MAX_TEST_SIZE);
24+
TEST_ASSERT_NOT_NULL(buf);
25+
buf = ps_realloc(buf, MAX_TEST_SIZE + 1024);
26+
TEST_ASSERT_NOT_NULL(buf);
27+
free(buf);
28+
buf = NULL;
29+
}
30+
31+
void test_malloc_fail(void) {
32+
buf = ps_malloc(0xFFFFFFFF);
33+
TEST_ASSERT_NULL(buf);
34+
}
35+
36+
void test_memset_all_zeroes(void) {
37+
memset(buf, 0, MAX_TEST_SIZE);
38+
for (size_t i = 0; i < MAX_TEST_SIZE; i++) {
39+
TEST_ASSERT_EQUAL(0, ((uint8_t *)buf)[i]);
40+
}
41+
}
42+
43+
void test_memset_all_ones(void) {
44+
memset(buf, 0xFF, MAX_TEST_SIZE);
45+
for (size_t i = 0; i < MAX_TEST_SIZE; i++) {
46+
TEST_ASSERT_EQUAL(0xFF, ((uint8_t *)buf)[i]);
47+
}
48+
}
49+
50+
void test_memset_alternating(void) {
51+
for (size_t i = 0; i < MAX_TEST_SIZE; i++) {
52+
((uint8_t *)buf)[i] = i % 2 == 0 ? 0x00 : 0xFF;
53+
}
54+
memset(buf, 0xAA, MAX_TEST_SIZE);
55+
for (size_t i = 0; i < MAX_TEST_SIZE; i++) {
56+
TEST_ASSERT_EQUAL(0xAA, ((uint8_t *)buf)[i]);
57+
}
58+
}
59+
60+
void test_memset_random(void) {
61+
for (size_t i = 0; i < MAX_TEST_SIZE; i++) {
62+
((uint8_t *)buf)[i] = random(0, 256);
63+
}
64+
memset(buf, 0x55, MAX_TEST_SIZE);
65+
for (size_t i = 0; i < MAX_TEST_SIZE; i++) {
66+
TEST_ASSERT_EQUAL(0x55, ((uint8_t *)buf)[i]);
67+
}
68+
}
69+
70+
void test_memcpy(void) {
71+
void *buf2 = malloc(1024); // 1KB
72+
TEST_ASSERT_NOT_NULL(buf2);
73+
memset(buf, 0x55, MAX_TEST_SIZE);
74+
memset(buf2, 0xAA, 1024);
75+
76+
for (size_t i = 0; i < MAX_TEST_SIZE; i += 1024) {
77+
memcpy(buf + i, buf2, 1024);
78+
}
79+
80+
for (size_t i = 0; i < MAX_TEST_SIZE; i += 1024) {
81+
TEST_ASSERT_NULL(memcmp(buf + i, buf2, 1024));
82+
}
83+
84+
free(buf2);
85+
}
86+
87+
void setup() {
88+
Serial.begin(115200);
89+
while (!Serial) {
90+
delay(10);
91+
}
92+
93+
UNITY_BEGIN();
94+
RUN_TEST(test_malloc_success);
95+
RUN_TEST(test_malloc_fail);
96+
RUN_TEST(test_calloc_success);
97+
RUN_TEST(test_realloc_success);
98+
buf = ps_malloc(MAX_TEST_SIZE);
99+
RUN_TEST(test_memset_all_zeroes);
100+
RUN_TEST(test_memset_all_ones);
101+
RUN_TEST(test_memset_alternating);
102+
RUN_TEST(test_memset_random);
103+
RUN_TEST(test_memcpy);
104+
UNITY_END();
105+
}
106+
107+
void loop() {}

Diff for: tests/validation/psram/test_psram.py

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
def test_psram(dut):
2+
dut.expect_unity_test_output(timeout=120)

0 commit comments

Comments
 (0)