diff options
-rw-r--r-- | tests/core/test_memcpy_memcmp.in | 45 | ||||
-rw-r--r-- | tests/core/test_memcpy_memcmp.out | 1 | ||||
-rw-r--r-- | tests/test_core.py | 50 |
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''' |