Skip to content

Commit 10a3c27

Browse files
authored
Migrate flavorful test to wit-bindgen test (#1267)
Splitting up the test instead of using the existing structure exactly, but still testing the same thing.
1 parent 5a23303 commit 10a3c27

File tree

11 files changed

+405
-528
lines changed

11 files changed

+405
-528
lines changed

crates/test-rust-wasm/Cargo.toml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,6 @@ wit-bindgen = { path = "../guest-rust" }
1111
test = false
1212
doctest = false
1313

14-
[[bin]]
15-
name = "flavorful"
16-
test = false
17-
1814
[[bin]]
1915
name = "results"
2016
test = false

crates/test-rust-wasm/src/bin/flavorful.rs

Lines changed: 0 additions & 3 deletions
This file was deleted.

tests/runtime-new/flavorful/runner.c

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
//@ args = '--rename test:flavorful/to-test=test'
2+
3+
#include <assert.h>
4+
#include <runner.h>
5+
#include <stdlib.h>
6+
#include <string.h>
7+
8+
int main() {
9+
{
10+
test_list_in_record1_t a;
11+
runner_string_set(&a.a, "list_in_record1");
12+
test_f_list_in_record1(&a);
13+
14+
test_list_in_record2_t b;
15+
test_f_list_in_record2(&b);
16+
assert(memcmp(b.a.ptr, "list_in_record2", b.a.len) == 0);
17+
test_list_in_record2_free(&b);
18+
}
19+
20+
{
21+
test_list_in_record3_t a, b;
22+
runner_string_set(&a.a, "list_in_record3 input");
23+
test_f_list_in_record3(&a, &b);
24+
assert(memcmp(b.a.ptr, "list_in_record3 output", b.a.len) == 0);
25+
test_list_in_record3_free(&b);
26+
}
27+
28+
{
29+
test_list_in_record4_t a, b;
30+
runner_string_set(&a.a, "input4");
31+
test_f_list_in_record4(&a, &b);
32+
assert(memcmp(b.a.ptr, "result4", b.a.len) == 0);
33+
test_list_in_record4_free(&b);
34+
}
35+
36+
{
37+
test_list_in_variant1_v1_t a;
38+
test_list_in_variant1_v2_t b;
39+
a.is_some = true;
40+
runner_string_set(&a.val, "foo");
41+
b.is_err = true;
42+
runner_string_set(&b.val.err, "bar");
43+
test_f_list_in_variant1(&a.val, &b);
44+
}
45+
46+
{
47+
runner_string_t a;
48+
assert(test_f_list_in_variant2(&a));
49+
assert(memcmp(a.ptr, "list_in_variant2", a.len) == 0);
50+
runner_string_free(&a);
51+
}
52+
53+
{
54+
test_list_in_variant3_t a;
55+
a.is_some = true;
56+
runner_string_set(&a.val, "input3");
57+
runner_string_t b;
58+
assert(test_f_list_in_variant3(&a.val, &b));
59+
assert(memcmp(b.ptr, "output3", b.len) == 0);
60+
runner_string_free(&b);
61+
}
62+
63+
{
64+
test_my_errno_t errno;
65+
assert(!test_errno_result(&errno));
66+
assert(errno == TEST_MY_ERRNO_B);
67+
}
68+
69+
{
70+
test_my_errno_t errno;
71+
assert(test_errno_result(&errno));
72+
}
73+
74+
{
75+
runner_string_t a;
76+
runner_string_set(&a, "typedef1");
77+
runner_string_t b_str;
78+
runner_string_set(&b_str, "typedef2");
79+
test_list_typedef3_t b;
80+
b.ptr = &b_str;
81+
b.len = 1;
82+
runner_tuple2_list_typedef2_list_typedef3_t ret;
83+
test_list_typedefs(&a, &b, &ret);
84+
85+
assert(memcmp(ret.f0.ptr, "typedef3", ret.f0.len) == 0);
86+
assert(ret.f1.len == 1);
87+
assert(memcmp(ret.f1.ptr[0].ptr, "typedef4", ret.f1.ptr[0].len) == 0);
88+
89+
test_list_typedef2_free(&ret.f0);
90+
test_list_typedef3_free(&ret.f1);
91+
}
92+
93+
{
94+
runner_list_bool_t a;
95+
bool a_val[] = {true, false};
96+
a.ptr = a_val;
97+
a.len = 2;
98+
99+
test_list_result_void_void_t b;
100+
test_result_void_void_t b_val[2];
101+
b_val[0].is_err = false;
102+
b_val[1].is_err = true;
103+
b.ptr = b_val;
104+
b.len = 2;
105+
106+
test_list_my_errno_t c;
107+
test_my_errno_t c_val[2];
108+
c_val[0] = TEST_MY_ERRNO_SUCCESS;
109+
c_val[1] = TEST_MY_ERRNO_A;
110+
c.ptr = c_val;
111+
c.len = 2;
112+
113+
test_tuple3_list_bool_list_result_void_void_list_my_errno_t ret;
114+
test_list_of_variants(&a, &b, &c, &ret);
115+
116+
assert(ret.f0.len == 2);
117+
assert(ret.f0.ptr[0] == false);
118+
assert(ret.f0.ptr[1] == true);
119+
120+
assert(ret.f1.len == 2);
121+
assert(ret.f1.ptr[0].is_err == true);
122+
assert(ret.f1.ptr[1].is_err == false);
123+
124+
assert(ret.f2.len == 2);
125+
assert(ret.f2.ptr[0] == TEST_MY_ERRNO_A);
126+
assert(ret.f2.ptr[1] == TEST_MY_ERRNO_B);
127+
128+
runner_list_bool_free(&ret.f0);
129+
test_list_result_void_void_free(&ret.f1);
130+
test_list_my_errno_free(&ret.f2);
131+
}
132+
}

tests/runtime-new/flavorful/runner.rs

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
include!(env!("BINDINGS"));
2+
3+
use crate::test::flavorful::to_test::*;
4+
5+
#[path = "../lists/alloc.rs"]
6+
mod alloc;
7+
8+
fn main() {
9+
let before = alloc::get();
10+
run();
11+
assert_eq!(before, alloc::get());
12+
}
13+
14+
fn run() {
15+
f_list_in_record1(&ListInRecord1 {
16+
a: "list_in_record1".to_string(),
17+
});
18+
assert_eq!(f_list_in_record2().a, "list_in_record2");
19+
20+
assert_eq!(
21+
f_list_in_record3(&ListInRecord3 {
22+
a: "list_in_record3 input".to_string()
23+
})
24+
.a,
25+
"list_in_record3 output"
26+
);
27+
28+
assert_eq!(
29+
f_list_in_record4(&ListInAlias {
30+
a: "input4".to_string()
31+
})
32+
.a,
33+
"result4"
34+
);
35+
36+
f_list_in_variant1(&Some("foo".to_string()), &Err("bar".to_string()));
37+
assert_eq!(f_list_in_variant2(), Some("list_in_variant2".to_string()));
38+
assert_eq!(
39+
f_list_in_variant3(&Some("input3".to_string())),
40+
Some("output3".to_string())
41+
);
42+
43+
assert!(errno_result().is_err());
44+
MyErrno::A.to_string();
45+
_ = format!("{:?}", MyErrno::A);
46+
fn assert_error<T: std::error::Error>() {}
47+
assert_error::<MyErrno>();
48+
49+
assert!(errno_result().is_ok());
50+
51+
let (a, b) = list_typedefs(&"typedef1".to_string(), &vec!["typedef2".to_string()]);
52+
assert_eq!(a, b"typedef3");
53+
assert_eq!(b.len(), 1);
54+
assert_eq!(b[0], "typedef4");
55+
56+
let (a, b, c) = list_of_variants(
57+
&[true, false],
58+
&[Ok(()), Err(())],
59+
&[MyErrno::Success, MyErrno::A],
60+
);
61+
assert_eq!(a, [false, true]);
62+
assert_eq!(b, [Err(()), Ok(())]);
63+
assert_eq!(c, [MyErrno::A, MyErrno::B]);
64+
}

tests/runtime-new/flavorful/test.c

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
//@ args = '--rename test:flavorful/to-test=test'
2+
3+
#include <assert.h>
4+
#include <stdlib.h>
5+
#include <string.h>
6+
7+
#include "test.h"
8+
9+
void exports_test_f_list_in_record1(exports_test_list_in_record1_t *a) {
10+
assert(memcmp(a->a.ptr, "list_in_record1", a->a.len) == 0);
11+
exports_test_list_in_record1_free(a);
12+
}
13+
14+
void exports_test_f_list_in_record2(exports_test_list_in_record2_t *ret0) {
15+
test_string_dup(&ret0->a, "list_in_record2");
16+
}
17+
18+
void exports_test_f_list_in_record3(exports_test_list_in_record3_t *a, exports_test_list_in_record3_t *ret0) {
19+
assert(memcmp(a->a.ptr, "list_in_record3 input", a->a.len) == 0);
20+
exports_test_list_in_record3_free(a);
21+
test_string_dup(&ret0->a, "list_in_record3 output");
22+
}
23+
24+
void exports_test_f_list_in_record4(exports_test_list_in_alias_t *a, exports_test_list_in_alias_t *ret0) {
25+
assert(memcmp(a->a.ptr, "input4", a->a.len) == 0);
26+
exports_test_list_in_alias_free(a);
27+
test_string_dup(&ret0->a, "result4");
28+
}
29+
30+
void exports_test_f_list_in_variant1(test_string_t *maybe_a, exports_test_list_in_variant1_v2_t *b) {
31+
assert(maybe_a != NULL);
32+
assert(memcmp(maybe_a->ptr, "foo", maybe_a->len) == 0);
33+
test_string_free(maybe_a);
34+
35+
assert(b->is_err);
36+
assert(memcmp(b->val.err.ptr, "bar", b->val.err.len) == 0);
37+
exports_test_list_in_variant1_v2_free(b);
38+
}
39+
40+
bool exports_test_f_list_in_variant2(test_string_t *ret0) {
41+
test_string_dup(ret0, "list_in_variant2");
42+
return true;
43+
}
44+
45+
bool exports_test_f_list_in_variant3(test_string_t *maybe_a, test_string_t *ret) {
46+
assert(maybe_a != NULL);
47+
assert(memcmp(maybe_a->ptr, "input3", maybe_a->len) == 0);
48+
test_string_free(maybe_a);
49+
test_string_dup(ret, "output3");
50+
return true;
51+
}
52+
53+
static bool RESULT_RETURNED = false;
54+
55+
bool exports_test_errno_result(exports_test_my_errno_t *err) {
56+
if (RESULT_RETURNED) {
57+
return true;
58+
} else {
59+
RESULT_RETURNED = true;
60+
*err = EXPORTS_TEST_MY_ERRNO_B;
61+
return false;
62+
}
63+
}
64+
65+
void exports_test_list_typedefs(
66+
exports_test_list_typedef_t *a,
67+
exports_test_list_typedef3_t *c,
68+
test_tuple2_list_typedef2_list_typedef3_t *ret) {
69+
assert(memcmp(a->ptr, "typedef1", a->len) == 0);
70+
exports_test_list_typedef_free(a);
71+
72+
assert(c->len == 1);
73+
assert(memcmp(c->ptr[0].ptr, "typedef2", c->ptr[0].len) == 0);
74+
exports_test_list_typedef3_free(c);
75+
76+
ret->f0.ptr = (uint8_t *) malloc(8);
77+
ret->f0.len = 8;
78+
memcpy(ret->f0.ptr, "typedef3", 8);
79+
80+
ret->f1.ptr = (test_string_t *) malloc(sizeof(test_string_t));
81+
ret->f1.len = 1;
82+
test_string_dup(&ret->f1.ptr[0], "typedef4");
83+
}
84+
85+
void exports_test_list_of_variants(
86+
test_list_bool_t *a,
87+
exports_test_list_result_void_void_t *b,
88+
exports_test_list_my_errno_t *c,
89+
exports_test_tuple3_list_bool_list_result_void_void_list_my_errno_t *ret) {
90+
91+
assert(a->len == 2);
92+
assert(a->ptr[0] == true);
93+
assert(a->ptr[1] == false);
94+
95+
assert(b->len == 2);
96+
assert(!b->ptr[0].is_err);
97+
assert(b->ptr[1].is_err);
98+
99+
assert(c->len == 2);
100+
assert(c->ptr[0] == EXPORTS_TEST_MY_ERRNO_SUCCESS);
101+
assert(c->ptr[1] == EXPORTS_TEST_MY_ERRNO_A);
102+
103+
ret->f0.ptr = malloc(2 * sizeof(bool));
104+
ret->f0.len = 2;
105+
ret->f0.ptr[0] = false;
106+
ret->f0.ptr[1] = true;
107+
108+
ret->f1.ptr = malloc(2 * sizeof(exports_test_result_void_void_t));
109+
ret->f1.len = 2;
110+
ret->f1.ptr[0].is_err = true;
111+
ret->f1.ptr[1].is_err = false;
112+
113+
ret->f2.ptr = malloc(2 * sizeof(exports_test_my_errno_t));
114+
ret->f2.len = 2;
115+
ret->f2.ptr[0] = EXPORTS_TEST_MY_ERRNO_A;
116+
ret->f2.ptr[1] = EXPORTS_TEST_MY_ERRNO_B;
117+
}

0 commit comments

Comments
 (0)