summaryrefslogtreecommitdiff
path: root/support/regression/tests/ultobcd.c
blob: 01d33911ef582878d40a162447db77f1912026d8 (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
41
42
/*
   ultobcd.c
*/

#include <testfwk.h>
#include <stdio.h>

extern void __ultobcd (unsigned long v, unsigned char r[5]);
#define CHECK(v)              \
    do {                      \
        static const unsigned char u[5] = { 0x##v % 0x100, (0x##v / 0x100) % 0x100, (0x##v / 0x10000) % 0x100, (0x##v / 0x1000000) % 0x100, (0x##v / 0x100000000) % 0x100 }; \
        unsigned char r[5] = { 0xff, 0xff, 0xff, 0xff, 0xff };   \
        __ultobcd (v, r);     \
        unsigned long bcd = r[4] * 0x100000000 + r[3] * 0x1000000 + r[2] * 0x10000 + r[1] * 0x100 + r[0]; \
        ASSERT ((#v,(r[0]==u[0]&&r[1]==u[1]&&r[2]==u[2]&&r[3]==u[3]&&r[4]==u[4]))); \
    } while (0)

void test__ultobcd (void)
{
#if defined(__SDCC_z80)
  CHECK(0);
  CHECK(1);
  CHECK(2);
  CHECK(9);
  CHECK(10);
  CHECK(11);
  CHECK(15);
  CHECK(16);
  CHECK(100000);
  CHECK(345678);
  CHECK(2345678);
  CHECK(12345678);
  CHECK(16777215);   //0x00ffffff
  CHECK(234567890);
  CHECK(2147483647); //0x7fffffff
  CHECK(2147483648); //0x80000000
  CHECK(3000000000);
  CHECK(3999999999);
  CHECK(4000000000);
  CHECK(4294967295); //0xffffffff
#endif
}