209 lines
5.2 KiB
C
209 lines
5.2 KiB
C
#include <assert.h>
|
|
#include <imports.h>
|
|
#include <exports.h>
|
|
|
|
void exports_test_imports() {
|
|
{
|
|
imports_option_float32_t a;
|
|
uint8_t r;
|
|
a.is_some = true;
|
|
a.val = 1;
|
|
assert(imports_roundtrip_option(&a, &r) && r == 1);
|
|
assert(r == 1);
|
|
a.is_some = false;
|
|
assert(!imports_roundtrip_option(&a, &r));
|
|
a.is_some = true;
|
|
a.val = 2;
|
|
assert(imports_roundtrip_option(&a, &r) && r == 2);
|
|
}
|
|
|
|
|
|
{
|
|
imports_expected_u32_float32_t a;
|
|
imports_expected_float64_u8_t b;
|
|
|
|
a.is_err = false;
|
|
a.val.ok = 2;
|
|
imports_roundtrip_result(&a, &b);
|
|
assert(!b.is_err);
|
|
assert(b.val.ok == 2.0);
|
|
|
|
a.val.ok = 4;
|
|
imports_roundtrip_result(&a, &b);
|
|
assert(!b.is_err);
|
|
assert(b.val.ok == 4);
|
|
|
|
a.is_err = true;
|
|
a.val.err = 5.3;
|
|
imports_roundtrip_result(&a, &b);
|
|
assert(b.is_err);
|
|
assert(b.val.err == 5);
|
|
}
|
|
|
|
assert(imports_roundtrip_enum(IMPORTS_E1_A) == IMPORTS_E1_A);
|
|
assert(imports_roundtrip_enum(IMPORTS_E1_B) == IMPORTS_E1_B);
|
|
|
|
assert(imports_invert_bool(true) == false);
|
|
assert(imports_invert_bool(false) == true);
|
|
|
|
{
|
|
imports_casts_t c;
|
|
imports_c1_t r1;
|
|
imports_c2_t r2;
|
|
imports_c3_t r3;
|
|
imports_c4_t r4;
|
|
imports_c5_t r5;
|
|
imports_c6_t r6;
|
|
c.f0.tag = IMPORTS_C1_A;
|
|
c.f0.val.a = 1;
|
|
c.f1.tag = IMPORTS_C2_A;
|
|
c.f1.val.a = 2;
|
|
c.f2.tag = IMPORTS_C3_A;
|
|
c.f2.val.a = 3;
|
|
c.f3.tag = IMPORTS_C4_A;
|
|
c.f3.val.a = 4;
|
|
c.f4.tag = IMPORTS_C5_A;
|
|
c.f4.val.a = 5;
|
|
c.f5.tag = IMPORTS_C6_A;
|
|
c.f5.val.a = 6;
|
|
imports_variant_casts(&c, &r1, &r2, &r3, &r4, &r5, &r6);
|
|
assert(r1.tag == IMPORTS_C1_A && r1.val.a == 1);
|
|
assert(r2.tag == IMPORTS_C2_A && r2.val.a == 2);
|
|
assert(r3.tag == IMPORTS_C3_A && r3.val.a == 3);
|
|
assert(r4.tag == IMPORTS_C4_A && r4.val.a == 4);
|
|
assert(r5.tag == IMPORTS_C5_A && r5.val.a == 5);
|
|
assert(r6.tag == IMPORTS_C6_A && r6.val.a == 6);
|
|
}
|
|
|
|
{
|
|
imports_casts_t c;
|
|
imports_c1_t r1;
|
|
imports_c2_t r2;
|
|
imports_c3_t r3;
|
|
imports_c4_t r4;
|
|
imports_c5_t r5;
|
|
imports_c6_t r6;
|
|
c.f0.tag = IMPORTS_C1_B;
|
|
c.f0.val.b = 1;
|
|
c.f1.tag = IMPORTS_C2_B;
|
|
c.f1.val.b = 2;
|
|
c.f2.tag = IMPORTS_C3_B;
|
|
c.f2.val.b = 3;
|
|
c.f3.tag = IMPORTS_C4_B;
|
|
c.f3.val.b = 4;
|
|
c.f4.tag = IMPORTS_C5_B;
|
|
c.f4.val.b = 5;
|
|
c.f5.tag = IMPORTS_C6_B;
|
|
c.f5.val.b = 6;
|
|
imports_variant_casts(&c, &r1, &r2, &r3, &r4, &r5, &r6);
|
|
assert(r1.tag == IMPORTS_C1_B && r1.val.b == 1);
|
|
assert(r2.tag == IMPORTS_C2_B && r2.val.b == 2);
|
|
assert(r3.tag == IMPORTS_C3_B && r3.val.b == 3);
|
|
assert(r4.tag == IMPORTS_C4_B && r4.val.b == 4);
|
|
assert(r5.tag == IMPORTS_C5_B && r5.val.b == 5);
|
|
assert(r6.tag == IMPORTS_C6_B && r6.val.b == 6);
|
|
}
|
|
|
|
{
|
|
imports_zeros_t c;
|
|
imports_z1_t r1;
|
|
imports_z2_t r2;
|
|
imports_z3_t r3;
|
|
imports_z4_t r4;
|
|
c.f0.tag = IMPORTS_Z1_A;
|
|
c.f0.val.a = 1;
|
|
c.f1.tag = IMPORTS_Z2_A;
|
|
c.f1.val.a = 2;
|
|
c.f2.tag = IMPORTS_Z3_A;
|
|
c.f2.val.a = 3;
|
|
c.f3.tag = IMPORTS_Z4_A;
|
|
c.f3.val.a = 4;
|
|
imports_variant_zeros(&c, &r1, &r2, &r3, &r4);
|
|
assert(r1.tag == IMPORTS_Z1_A && r1.val.a == 1);
|
|
assert(r2.tag == IMPORTS_Z2_A && r2.val.a == 2);
|
|
assert(r3.tag == IMPORTS_Z3_A && r3.val.a == 3);
|
|
assert(r4.tag == IMPORTS_Z4_A && r4.val.a == 4);
|
|
}
|
|
|
|
{
|
|
imports_zeros_t c;
|
|
imports_z1_t r1;
|
|
imports_z2_t r2;
|
|
imports_z3_t r3;
|
|
imports_z4_t r4;
|
|
c.f0.tag = IMPORTS_Z1_B;
|
|
c.f1.tag = IMPORTS_Z2_B;
|
|
c.f2.tag = IMPORTS_Z3_B;
|
|
c.f3.tag = IMPORTS_Z4_B;
|
|
imports_variant_zeros(&c, &r1, &r2, &r3, &r4);
|
|
assert(r1.tag == IMPORTS_Z1_B);
|
|
assert(r2.tag == IMPORTS_Z2_B);
|
|
assert(r3.tag == IMPORTS_Z3_B);
|
|
assert(r4.tag == IMPORTS_Z4_B);
|
|
}
|
|
|
|
{
|
|
imports_option_typedef_t a;
|
|
a.is_some = false;
|
|
bool b = false;
|
|
imports_result_typedef_t c;
|
|
c.is_err = true;
|
|
imports_variant_typedefs(&a, b, &c);
|
|
}
|
|
|
|
{
|
|
bool a;
|
|
imports_expected_unit_unit_t b;
|
|
imports_my_errno_t c;
|
|
b.is_err = false;
|
|
imports_variant_enums(true, &b, IMPORTS_MY_ERRNO_SUCCESS, &a, &b, &c);
|
|
assert(a == false);
|
|
assert(b.is_err);
|
|
assert(c == IMPORTS_MY_ERRNO_A);
|
|
}
|
|
}
|
|
|
|
bool exports_roundtrip_option(exports_option_float32_t *a, uint8_t *ret0) {
|
|
if (a->is_some) {
|
|
*ret0 = a->val;
|
|
}
|
|
return a->is_some;
|
|
}
|
|
|
|
void exports_roundtrip_result(exports_expected_u32_float32_t *a, exports_expected_float64_u8_t *ret0) {
|
|
ret0->is_err = a->is_err;
|
|
if (a->is_err) {
|
|
ret0->val.err = a->val.err;
|
|
} else {
|
|
ret0->val.ok = a->val.ok;
|
|
}
|
|
}
|
|
|
|
exports_e1_t exports_roundtrip_enum(exports_e1_t a) {
|
|
return a;
|
|
}
|
|
|
|
bool exports_invert_bool(bool a) {
|
|
return !a;
|
|
}
|
|
|
|
void exports_variant_casts(exports_casts_t *a, exports_c1_t *ret0, exports_c2_t *ret1, exports_c3_t *ret2, exports_c4_t *ret3, exports_c5_t *ret4, exports_c6_t *ret5) {
|
|
*ret0 = a->f0;
|
|
*ret1 = a->f1;
|
|
*ret2 = a->f2;
|
|
*ret3 = a->f3;
|
|
*ret4 = a->f4;
|
|
*ret5 = a->f5;
|
|
}
|
|
|
|
void exports_variant_zeros(exports_zeros_t *a, exports_z1_t *ret0, exports_z2_t *ret1, exports_z3_t *ret2, exports_z4_t *ret3) {
|
|
*ret0 = a->f0;
|
|
*ret1 = a->f1;
|
|
*ret2 = a->f2;
|
|
*ret3 = a->f3;
|
|
}
|
|
|
|
void exports_variant_typedefs(exports_option_typedef_t *a, exports_bool_typedef_t b, exports_result_typedef_t *c) {
|
|
}
|
|
|