]> git.sur5r.net Git - cc65/blob - test/val/lib_common_memmove.c
temporarily disable optimizations altogether until a fine grain control
[cc65] / test / val / lib_common_memmove.c
1 // temporarily disable optimizations altogether until a fine grain control
2 // is implemented on Makefile level only disabling the compiler option -Os
3 #pragma optimize (off)
4
5 #include <string.h>
6 #include "unittest.h"
7
8 #define BufferSize 384               // test correct page passing (>256, multiple of 128 here)
9
10 static char Buffer[BufferSize+3];    // +1 to move up (and down)
11
12
13
14 TEST
15 {
16     unsigned i, v;
17     char*    p;
18     
19     for (i=0; i < BufferSize; ++i)
20       Buffer[i+1] = (i%128);
21
22     Buffer[0] = 255;                  // to check if start position is untouched
23     Buffer[BufferSize+2] = 255;       // to check if end position is untouched
24
25     // copy upwards
26     p = memmove(Buffer+2, Buffer+1, BufferSize);
27
28     // check buffer consistency before target
29     ASSERT_AreEqual(255, (unsigned)Buffer[0], "%u", "Unexpected value before range!");
30
31     // check buffer consistency at starting point
32     ASSERT_AreEqual(0, (unsigned)Buffer[1], "%u", "Unexpected value at range start!");
33
34     // check buffer consistency after range
35     ASSERT_AreEqual(255, (unsigned)Buffer[BufferSize+2], "%u", "Unexpected value after range!");
36
37     // check buffer values
38     for (i=0; i < BufferSize; ++i)
39     {
40         ASSERT_AreEqual(i%128, (unsigned)Buffer[i+2], "%u", "Unexpected value in buffer at position %u!" COMMA i+2);
41     }
42
43     v = Buffer[BufferSize+1];   // rember value of first untouched end-byte 
44
45     // copy downwards
46     p = memmove(Buffer+1, Buffer+2, BufferSize);
47
48     // check buffer consistency before target
49     ASSERT_AreEqual(255, (unsigned)Buffer[0], "%u", "Unexpected value before range!");
50
51     // check buffer consistency at end point
52     ASSERT_AreEqual(v, (unsigned)Buffer[BufferSize+1], "%u", "Unexpected value at range end!");
53
54     // check buffer consistency after range
55     ASSERT_AreEqual(255, (unsigned)Buffer[BufferSize+2], "%u", "Unexpected value after range!");
56
57     // check buffer values
58     for (i=0; i < BufferSize; ++i)
59     {
60         ASSERT_AreEqual(i%128, (unsigned)Buffer[i+1], "%u", "Unexpected value in buffer at position %u!" COMMA i+1);
61     }
62 }
63 ENDTEST
64
65