summaryrefslogtreecommitdiff
path: root/bits_test.c
blob: 1527fe44ca79eabcc98997fd222d3dee77a4e24f (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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/* $Id$ */
/* test harness for bits.h */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "bits.h"

/*@ -duplicatequals -formattype */
typedef unsigned long long ubig;

static unsigned char buf[80];
static union int_float i_f;
static union long_double l_d;
static char sb1,sb2;
static unsigned char ub1,ub2;
static short sw1,sw2;
static unsigned short uw1,uw2;
static int sl1,sl2;
static unsigned int ul1,ul2;
static long long sL1,sL2;
static unsigned long long uL1,uL2;
static float f1;
static double d1;

static void dumpall(void)
{
    (void)printf("getsb: %016llx %016llx %016llx %016llx\n",
		(ubig)sb1, (ubig)sb2,
		(ubig)getsb(buf, 0), (ubig)getsb(buf, 8));
    (void)printf("getub: %016llx %016llx %016llx %016llx\n",
		(ubig)ub1, (ubig)ub2,
		(ubig)getub(buf, 0), (ubig)getub(buf, 8));
    (void)printf("getsw: %016llx %016llx %016llx %016llx\n",
		(ubig)sw1, (ubig)sw2,
		(ubig)getsw(buf, 0), (ubig)getsw(buf, 8));
    (void)printf("getuw: %016llx %016llx %016llx %016llx\n",
		(ubig)uw1, (ubig)uw2,
		(ubig)getuw(buf, 0), (ubig)getuw(buf, 8));
    (void)printf("getsl: %016llx %016llx %016llx %016llx\n",
		(ubig)sl1, (ubig)sl2,
		(ubig)getsl(buf, 0), (ubig)getsl(buf, 8));
    (void)printf("getul: %016llx %016llx %016llx %016llx\n",
		(ubig)ul1, (ubig)ul2,
		(ubig)getul(buf, 0), (ubig)getul(buf, 8));
    (void)printf("getsL: %016llx %016llx %016llx %016llx\n",
		(ubig)sL1, (ubig)sL2,
		(ubig)getsL(buf, 0), (ubig)getsL(buf, 8));
    (void)printf("getuL: %016llx %016llx %016llx %016llx\n",
		(ubig)uL1, (ubig)uL2,
		(ubig)getuL(buf, 0), (ubig)getuL(buf, 8));
    (void)printf("getf: %f %f\n", f1, getf(buf, 24));
    (void)printf("getd: %.16f %.16f\n", d1, getd(buf, 16));
}

/*@ -duplicatequals +ignorequals @*/
int main(void)
{
    memcpy(buf,"\x01\x02\x03\x04\x05\x06\x07\x08",8);
    memcpy(buf+8,"\xff\xfe\xfd\xfc\xfb\xfa\xf9\xf8",8);
    memcpy(buf+16,"\x40\x09\x21\xfb\x54\x44\x2d\x18",8);
    memcpy(buf+24,"\x40\x49\x0f\xdb",4);

    /* big-endian test */
    printf("Big-endian\n");
#include "bits.h"
    sb1 = getsb(buf, 0);
    sb2 = getsb(buf, 8);
    ub1 = getub(buf, 0);
    ub2 = getub(buf, 8);
    sw1 = getsw(buf, 0);
    sw2 = getsw(buf, 8);
    uw1 = getuw(buf, 0);
    uw2 = getuw(buf, 8);
    sl1 = getsl(buf, 0);
    sl2 = getsl(buf, 8);
    ul1 = getul(buf, 0);
    ul2 = getul(buf, 8);
    sL1 = getsL(buf, 0);
    sL2 = getsL(buf, 8);
    uL1 = getuL(buf, 0);
    uL2 = getuL(buf, 8);
    f1 = getf(buf, 24);
    d1 = getd(buf, 16);

    dumpall();

#undef getub
#undef getsb
#undef getuw
#undef getsw
#undef getul
#undef getsl
#undef getuL
#undef getsL
#undef putword
#undef putlong

    /* little-endian test */
#define LITTLE_ENDIAN_PROTOCOL
    printf("Little-endian\n");
#include "bits.h"
    sb1 = getsb(buf, 0);
    sb2 = getsb(buf, 8);
    ub1 = getub(buf, 0);
    ub2 = getub(buf, 8);
    sw1 = getsw(buf, 0);
    sw2 = getsw(buf, 8);
    uw1 = getuw(buf, 0);
    uw2 = getuw(buf, 8);
    sl1 = getsl(buf, 0);
    sl2 = getsl(buf, 8);
    ul1 = getul(buf, 0);
    ul2 = getul(buf, 8);
    sL1 = getsL(buf, 0);
    sL2 = getsL(buf, 8);
    uL1 = getuL(buf, 0);
    uL2 = getuL(buf, 8);
    f1 = getf(buf, 24);
    d1 = getd(buf, 16);
    dumpall();

    exit(0);
}