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
|
#include <stdlib.h>
#include <stdio.h>
/* Device Under Test */
static unsigned long CreateMask32 (unsigned int borne, int *perr)
{
unsigned long bm = 0xFFFFFFFFu;
int err = 0;
if (borne <= 32)
{
if (0 == borne)
{
bm = 0;
}
else
{
bm = bm >> (32 - borne);
}
}
else
{
err = 1;
}
if (perr != NULL)
{
*perr = err;
}
return bm;
}
static int tu (void)
{
#define N(a) (sizeof(a)/sizeof*(a))
int ret = EXIT_SUCCESS;
struct test
{
unsigned long nb;
struct in
{
unsigned a;
}
in;
struct out
{
unsigned long result;
unsigned long err;
}
out;
};
static struct test a[] =
{
{10, 0, 0x00000000, 0},
{12, 1, 0x00000001, 0},
{13, 31, 0x7FFFFFFF, 0},
{14, 32, 0xFFFFFFFFu, 0},
{20, -1, 0xFFFFFFFFu, 1},
{21, 33, 0xFFFFFFFFu, 1},
};
int err = 0;
size_t i;
for (i = 0; i < N (a) && !err; i++)
{
struct test const *p = a + i;
int dut_err;
unsigned long out = CreateMask32 (p->in.a, &dut_err);
if (out != p->out.result)
{
printf ("ERROR on result at test %lu\n\n", p->nb);
err = 1;
}
if (dut_err != p->out.err)
{
printf ("ERROR on err at test %lu\n\n", p->nb);
err = 1;
}
if (dut_err)
{
puts ("D.U.T. error");
}
}
if (!err)
{
puts ("\nP A S S E D\n");
}
return ret;
}
int main (void)
{
int ret = tu ();
return ret;
} |
Partager