summaryrefslogtreecommitdiff
path: root/support/regression/tests/swap_add.c
blob: 22aabb5212edcf545f1f4b3bb54e9c27049c4b96 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/** Swap test using 'addition' instead of usual 'or'
*/

#include <testfwk.h>
#ifdef __sun__
#include <inttypes.h>
#else
#include <stdint.h>
#endif

uint8_t 
swap_add_8(uint8_t value)
{
    value = (value << 4) + (value >> 4);
    return value;
}

#define SWAP_ADD_8(value) (((value << 4) & 0xF0u) | ((value >> 4) & 0x0Fu))
#define SWAP_ADD_8_EQUALS(value) (swap_add_8(value) == SWAP_ADD_8(value))
static void
testSwapAdd(void)
{
#ifndef __SDCC_pdk15 // Bug
    ASSERT(SWAP_ADD_8_EQUALS(0x01));
    ASSERT(SWAP_ADD_8_EQUALS(0x02));
    ASSERT(SWAP_ADD_8_EQUALS(0x04));
    ASSERT(SWAP_ADD_8_EQUALS(0x08));
    
    ASSERT(SWAP_ADD_8_EQUALS(0x10));
    ASSERT(SWAP_ADD_8_EQUALS(0x20));
    ASSERT(SWAP_ADD_8_EQUALS(0x40));
    ASSERT(SWAP_ADD_8_EQUALS(0x80));
    
    ASSERT(SWAP_ADD_8_EQUALS(0x0F));
    ASSERT(SWAP_ADD_8_EQUALS(0xF0));
    ASSERT(SWAP_ADD_8_EQUALS(0x3C));
    ASSERT(SWAP_ADD_8_EQUALS(0xC3));
#endif
}