Add test for M_MOVE_DEFAULT

This commit is contained in:
Patrick Pelissier committed 2019-11-29 23:12:34 +01:00
1 parent 82fd4c94db
commit 7fe36f7bd7
1 file changed
+81 -5
+81 -5
View File
@@ -273,15 +273,15 @@ static void test_oplist(void)
assert (!M_OPLIST_P(func(INIT(init)) a));
assert (!M_OPLIST_P(func(INIT(init),) a));
#define a (INIT(0), CLEAR(clear))
assert (M_TEST_DISABLED_METHOD_P(INIT, a));
assert (!M_TEST_DISABLED_METHOD_P(INIT2, a));
assert (!M_TEST_DISABLED_METHOD_P(CLEAR, a));
#define aop (INIT(0), CLEAR(clear))
assert (M_TEST_DISABLED_METHOD_P(INIT, aop));
assert (!M_TEST_DISABLED_METHOD_P(INIT2, aop));
assert (!M_TEST_DISABLED_METHOD_P(CLEAR, aop));
assert (!M_TEST_DISABLED_METHOD_P(INIT, ()));
#define M_OPL_op() (INIT(1), CLEAR(0))
assert(M_GET_INIT M_GLOBAL_OPLIST(op));
assert(!M_GET_INIT M_GLOBAL_OPLIST(a));
assert(!M_GET_INIT M_GLOBAL_OPLIST(aop));
#define MAKE_OPLIST(op) (OPLIST(M_GLOBAL_OPLIST_OR_DEF(op)()))
#define M_OPL_uint() (INIT(0), CLEAR(1))
@@ -371,6 +371,81 @@ static void test_parse_standard_c_type(void)
#endif
}
typedef int ti[1];
typedef struct { int b,c; } ts;
static void f_ti(ti x)
{
ti y;
M_MOVE_A1_DEFAULT(y,x);
assert(y[0] == 9);
assert(x[0] == 0);
}
static void f_ts(ts x)
{
ts y;
M_MOVE_DEFAULT(y,x);
assert(y.b == 2);
assert(y.c == 3);
assert(x.b == 0);
assert(x.c == 0);
}
static void f_ts2(ts *x)
{
ts y;
M_MOVE_DEFAULT(y,*x);
assert(y.b == 2);
assert(y.c == 3);
assert(x->b == 0);
assert(x->c == 0);
}
static void test_move_default(void)
{
int o, p;
o = 9;
M_MOVE_DEFAULT(p, o);
assert(p == 9);
assert(o == 0);
double u, k;
u = 9.5;
M_MOVE_DEFAULT(k, u);
assert(k == 9.5);
assert(u == 0.0); // NOTE: memset(0) sets an IEEE-754 number to 0.0
int *ptr = &o, *m;
M_MOVE_DEFAULT(m, ptr);
assert( ptr == NULL);
assert( m == &o);
ti x, y;
x[0] = 9;
M_MOVE_A1_DEFAULT(y, x);
assert(y[0] == 9);
assert(x[0] == 0);
x[0] = 9;
f_ti(x);
assert(x[0] == 0);
ts y2, x2 = { .b = 2, .c = 3};
M_MOVE_DEFAULT(y2, x2);
assert(y2.b == 2 && y2.c == 3);
assert(x2.b == 0 && x2.c == 0);
x2.b = 2; x2.c = 3;
f_ts(x2);
assert(x2.b == 2);
assert(x2.c == 3);
f_ts2(&x2);
assert(x2.b == 0);
assert(x2.c == 0);
}
int main(void)
{
test_cat();
@@ -389,5 +464,6 @@ int main(void)
test_cast();
test_reduce();
test_parse_standard_c_type();
test_move_default();
exit(0);
}