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