aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/core/test_memcpy_memcmp.in45
-rw-r--r--tests/core/test_memcpy_memcmp.out1
-rw-r--r--tests/test_core.py50
3 files changed, 50 insertions, 46 deletions
diff --git a/tests/core/test_memcpy_memcmp.in b/tests/core/test_memcpy_memcmp.in
new file mode 100644
index 00000000..c89d7ef6
--- /dev/null
+++ b/tests/core/test_memcpy_memcmp.in
@@ -0,0 +1,45 @@
+
+ #include <stdio.h>
+ #include <string.h>
+ #include <assert.h>
+
+ #define MAXX 48
+ void reset(unsigned char *buffer) {
+ for (int i = 0; i < MAXX; i++) buffer[i] = i+1;
+ }
+ void dump(unsigned char *buffer) {
+ for (int i = 0; i < MAXX-1; i++) printf("%2d,", buffer[i]);
+ printf("%d\n", buffer[MAXX-1]);
+ }
+ int main() {
+ unsigned char buffer[MAXX];
+ for (int i = MAXX/4; i < MAXX-MAXX/4; i++) {
+ for (int j = MAXX/4; j < MAXX-MAXX/4; j++) {
+ for (int k = 1; k < MAXX/4; k++) {
+ if (i == j) continue;
+ if (i < j && i+k > j) continue;
+ if (j < i && j+k > i) continue;
+ printf("[%d,%d,%d] ", i, j, k);
+ reset(buffer);
+ memcpy(buffer+i, buffer+j, k);
+ dump(buffer);
+ assert(memcmp(buffer+i, buffer+j, k) == 0);
+ buffer[i + k/2]++;
+ if (buffer[i + k/2] != 0) {
+ assert(memcmp(buffer+i, buffer+j, k) > 0);
+ } else {
+ assert(memcmp(buffer+i, buffer+j, k) < 0);
+ }
+ buffer[i + k/2]--;
+ buffer[j + k/2]++;
+ if (buffer[j + k/2] != 0) {
+ assert(memcmp(buffer+i, buffer+j, k) < 0);
+ } else {
+ assert(memcmp(buffer+i, buffer+j, k) > 0);
+ }
+ }
+ }
+ }
+ return 0;
+ }
+ \ No newline at end of file
diff --git a/tests/core/test_memcpy_memcmp.out b/tests/core/test_memcpy_memcmp.out
new file mode 100644
index 00000000..93420981
--- /dev/null
+++ b/tests/core/test_memcpy_memcmp.out
@@ -0,0 +1 @@
+6c9cdfe937383b79e52ca7a2cce83a21d9f5422c \ No newline at end of file
diff --git a/tests/test_core.py b/tests/test_core.py
index 40833390..8ab5672e 100644
--- a/tests/test_core.py
+++ b/tests/test_core.py
@@ -2525,55 +2525,13 @@ The current type of b is: 9
self.do_run_from_file(src, output)
def test_memcpy_memcmp(self):
- src = '''
- #include <stdio.h>
- #include <string.h>
- #include <assert.h>
+ test_path = path_from_root('tests', 'core', 'test_memcpy_memcmp')
+ src, output = (test_path + s for s in ('.in', '.out'))
- #define MAXX 48
- void reset(unsigned char *buffer) {
- for (int i = 0; i < MAXX; i++) buffer[i] = i+1;
- }
- void dump(unsigned char *buffer) {
- for (int i = 0; i < MAXX-1; i++) printf("%2d,", buffer[i]);
- printf("%d\\n", buffer[MAXX-1]);
- }
- int main() {
- unsigned char buffer[MAXX];
- for (int i = MAXX/4; i < MAXX-MAXX/4; i++) {
- for (int j = MAXX/4; j < MAXX-MAXX/4; j++) {
- for (int k = 1; k < MAXX/4; k++) {
- if (i == j) continue;
- if (i < j && i+k > j) continue;
- if (j < i && j+k > i) continue;
- printf("[%d,%d,%d] ", i, j, k);
- reset(buffer);
- memcpy(buffer+i, buffer+j, k);
- dump(buffer);
- assert(memcmp(buffer+i, buffer+j, k) == 0);
- buffer[i + k/2]++;
- if (buffer[i + k/2] != 0) {
- assert(memcmp(buffer+i, buffer+j, k) > 0);
- } else {
- assert(memcmp(buffer+i, buffer+j, k) < 0);
- }
- buffer[i + k/2]--;
- buffer[j + k/2]++;
- if (buffer[j + k/2] != 0) {
- assert(memcmp(buffer+i, buffer+j, k) < 0);
- } else {
- assert(memcmp(buffer+i, buffer+j, k) > 0);
- }
- }
- }
- }
- return 0;
- }
- '''
def check(result, err):
return hashlib.sha1(result).hexdigest()
- self.do_run(src, '6c9cdfe937383b79e52ca7a2cce83a21d9f5422c',
- output_nicerizer = check)
+
+ self.do_run_from_file(src, output, output_nicerizer = check)
def test_memcpy2(self):
src = r'''