Skip to content

Commit 761ef55

Browse files
authored
Migrage records test to new test framework (#1229)
Signed-off-by: James Sturtevant <[email protected]>
1 parent 2920a8c commit 761ef55

File tree

14 files changed

+288
-414
lines changed

14 files changed

+288
-414
lines changed

crates/test-rust-wasm/Cargo.toml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,6 @@ rust-xcrate-test = { path = './rust-xcrate-test' }
1212
test = false
1313
doctest = false
1414

15-
[[bin]]
16-
name = "records"
17-
test = false
18-
1915
[[bin]]
2016
name = "variants"
2117
test = false

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

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

tests/runtime-new/records/runner.c

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
#include <assert.h>
2+
#include "runner.h"
3+
4+
int main()
5+
{
6+
{
7+
runner_tuple2_u8_u16_t ret;
8+
test_records_to_test_multiple_results(&ret);
9+
assert(ret.f0 == 4);
10+
assert(ret.f1 == 5);
11+
}
12+
13+
runner_tuple2_u8_u32_t input;
14+
runner_tuple2_u32_u8_t output;
15+
input.f0 = 1;
16+
input.f1 = 2;
17+
test_records_to_test_swap_tuple(&input, &output);
18+
assert(output.f0 == 2);
19+
assert(output.f1 == 1);
20+
21+
assert(test_records_to_test_roundtrip_flags1(TEST_RECORDS_TO_TEST_F1_A) == TEST_RECORDS_TO_TEST_F1_A);
22+
assert(test_records_to_test_roundtrip_flags1(0) == 0);
23+
assert(test_records_to_test_roundtrip_flags1(TEST_RECORDS_TO_TEST_F1_B) == TEST_RECORDS_TO_TEST_F1_B);
24+
assert(test_records_to_test_roundtrip_flags1(TEST_RECORDS_TO_TEST_F1_A | TEST_RECORDS_TO_TEST_F1_B) == (TEST_RECORDS_TO_TEST_F1_A | TEST_RECORDS_TO_TEST_F1_B));
25+
26+
assert(test_records_to_test_roundtrip_flags2(TEST_RECORDS_TO_TEST_F2_C) == TEST_RECORDS_TO_TEST_F2_C);
27+
assert(test_records_to_test_roundtrip_flags2(0) == 0);
28+
assert(test_records_to_test_roundtrip_flags2(TEST_RECORDS_TO_TEST_F2_D) == TEST_RECORDS_TO_TEST_F2_D);
29+
assert(test_records_to_test_roundtrip_flags2(TEST_RECORDS_TO_TEST_F2_C | TEST_RECORDS_TO_TEST_F2_E) == (TEST_RECORDS_TO_TEST_F2_C | TEST_RECORDS_TO_TEST_F2_E));
30+
31+
test_records_to_test_tuple3_flag8_flag16_flag32_t ret;
32+
test_records_to_test_roundtrip_flags3(TEST_RECORDS_TO_TEST_FLAG8_B0, TEST_RECORDS_TO_TEST_FLAG16_B1, TEST_RECORDS_TO_TEST_FLAG32_B2,
33+
&ret);
34+
assert(ret.f0 == TEST_RECORDS_TO_TEST_FLAG8_B0);
35+
assert(ret.f1 == TEST_RECORDS_TO_TEST_FLAG16_B1);
36+
assert(ret.f2 == TEST_RECORDS_TO_TEST_FLAG32_B2);
37+
38+
{
39+
test_records_to_test_r1_t a, b;
40+
a.a = 8;
41+
a.b = 0;
42+
test_records_to_test_roundtrip_record1(&a, &b);
43+
assert(b.a == 8);
44+
assert(b.b == 0);
45+
}
46+
47+
{
48+
test_records_to_test_r1_t a, b;
49+
a.a = 0;
50+
a.b = TEST_RECORDS_TO_TEST_F1_A | TEST_RECORDS_TO_TEST_F1_B;
51+
test_records_to_test_roundtrip_record1(&a, &b);
52+
assert(b.a == 0);
53+
assert(b.b == (TEST_RECORDS_TO_TEST_F1_A | TEST_RECORDS_TO_TEST_F1_B));
54+
}
55+
56+
runner_tuple1_u8_t t1, t2;
57+
t1.f0 = 1;
58+
test_records_to_test_tuple1(&t1, &t2);
59+
assert(t2.f0 == 1);
60+
}

tests/runtime-new/records/runner.cs

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
using System;
2+
using System.Runtime.InteropServices;
3+
using System.Diagnostics;
4+
using RunnerWorld.wit.imports.test.records;
5+
using RunnerWorld;
6+
7+
public class Program {
8+
public static void Main()
9+
{
10+
{
11+
var results = ToTestInterop.MultipleResults();
12+
Debug.Assert(results.Item1 == 4);
13+
Debug.Assert(results.Item2 == 5);
14+
}
15+
16+
(byte, uint) input = (1, 2);
17+
(uint, byte) output = ToTestInterop.SwapTuple(input);
18+
Debug.Assert(output.Item1 == 2);
19+
Debug.Assert(output.Item2 == 1);
20+
21+
Debug.Assert(ToTestInterop.RoundtripFlags1(IToTest.F1.A) == IToTest.F1.A);
22+
Debug.Assert(ToTestInterop.RoundtripFlags1(0) == 0);
23+
Debug.Assert(ToTestInterop.RoundtripFlags1(IToTest.F1.B) == IToTest.F1.B);
24+
Debug.Assert(ToTestInterop.RoundtripFlags1(IToTest.F1.A | IToTest.F1.B) == (IToTest.F1.A | IToTest.F1.B));
25+
26+
Debug.Assert(ToTestInterop.RoundtripFlags2(IToTest.F2.C) == IToTest.F2.C);
27+
Debug.Assert(ToTestInterop.RoundtripFlags2(0) == 0);
28+
Debug.Assert(ToTestInterop.RoundtripFlags2(IToTest.F2.D) == IToTest.F2.D);
29+
Debug.Assert(ToTestInterop.RoundtripFlags2(IToTest.F2.C | IToTest.F2.E) == (IToTest.F2.C | IToTest.F2.E));
30+
31+
{
32+
var result = ToTestInterop.RoundtripFlags3(IToTest.Flag8.B0, IToTest.Flag16.B1,
33+
IToTest.Flag32.B2);
34+
Debug.Assert(result.Item1 == IToTest.Flag8.B0);
35+
Debug.Assert(result.Item2 == IToTest.Flag16.B1);
36+
Debug.Assert(result.Item3 == IToTest.Flag32.B2);
37+
}
38+
39+
{
40+
IToTest.R1 inputRecord = new(8, 0);
41+
var result = ToTestInterop.RoundtripRecord1(inputRecord);
42+
Debug.Assert(result.a == 8);
43+
Debug.Assert(result.b == 0);
44+
}
45+
46+
{
47+
IToTest.R1 inputRecord = new(0, IToTest.F1.A | IToTest.F1.B);
48+
49+
var result = ToTestInterop.RoundtripRecord1(inputRecord);
50+
Debug.Assert(result.a == 0);
51+
Debug.Assert(result.b == (IToTest.F1.A | IToTest.F1.B));
52+
}
53+
54+
{
55+
var result = ToTestInterop.Tuple1(1);
56+
Debug.Assert(result == 1);
57+
}
58+
}
59+
}

tests/runtime-new/records/runner.rs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
include!(env!("BINDINGS"));
2+
3+
use crate::test::records::to_test::*;
4+
5+
fn main() {
6+
assert_eq!(multiple_results(), (4, 5));
7+
8+
assert_eq!(swap_tuple((1u8, 2u32)), (2u32, 1u8));
9+
assert_eq!(roundtrip_flags1(F1::A), F1::A);
10+
assert_eq!(roundtrip_flags1(F1::empty()), F1::empty());
11+
assert_eq!(roundtrip_flags1(F1::B), F1::B);
12+
assert_eq!(roundtrip_flags1(F1::A | F1::B), F1::A | F1::B);
13+
14+
assert_eq!(roundtrip_flags2(F2::C), F2::C);
15+
assert_eq!(roundtrip_flags2(F2::empty()), F2::empty());
16+
assert_eq!(roundtrip_flags2(F2::D), F2::D);
17+
assert_eq!(roundtrip_flags2(F2::C | F2::E), F2::C | F2::E);
18+
19+
assert_eq!(
20+
roundtrip_flags3(Flag8::B0, Flag16::B1, Flag32::B2),
21+
(Flag8::B0, Flag16::B1, Flag32::B2)
22+
);
23+
24+
let r = roundtrip_record1(R1 {
25+
a: 8,
26+
b: F1::empty(),
27+
});
28+
assert_eq!(r.a, 8);
29+
assert_eq!(r.b, F1::empty());
30+
31+
let r = roundtrip_record1(R1 {
32+
a: 0,
33+
b: F1::A | F1::B,
34+
});
35+
assert_eq!(r.a, 0);
36+
assert_eq!(r.b, F1::A | F1::B);
37+
38+
assert_eq!(tuple1((1,)), (1,));
39+
}

tests/runtime-new/records/test.c

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
#include <assert.h>
2+
#include "test.h"
3+
4+
void exports_test_records_to_test_multiple_results(test_tuple2_u8_u16_t *ret) {
5+
ret->f0 = 4;
6+
ret->f1 = 5;
7+
}
8+
9+
void exports_test_records_to_test_swap_tuple(test_tuple2_u8_u32_t *a, test_tuple2_u32_u8_t *b) {
10+
b->f0 = a->f1;
11+
b->f1 = a->f0;
12+
}
13+
14+
exports_test_records_to_test_f1_t exports_test_records_to_test_roundtrip_flags1(exports_test_records_to_test_f1_t a) {
15+
return a;
16+
}
17+
18+
exports_test_records_to_test_f2_t exports_test_records_to_test_roundtrip_flags2(exports_test_records_to_test_f2_t a) {
19+
return a;
20+
}
21+
22+
void exports_test_records_to_test_roundtrip_flags3(
23+
exports_test_records_to_test_flag8_t a,
24+
exports_test_records_to_test_flag16_t b,
25+
exports_test_records_to_test_flag32_t c,
26+
exports_test_records_to_test_tuple3_flag8_flag16_flag32_t *ret) {
27+
ret->f0 = a;
28+
ret->f1 = b;
29+
ret->f2 = c;
30+
}
31+
32+
void exports_test_records_to_test_roundtrip_record1(exports_test_records_to_test_r1_t *a, exports_test_records_to_test_r1_t *ret0) {
33+
*ret0 = *a;
34+
}
35+
36+
void exports_test_records_to_test_tuple1(test_tuple1_u8_t *a, test_tuple1_u8_t *b) {
37+
b->f0 = a->f0;
38+
}
39+

tests/runtime-new/records/test.cs

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
namespace TestWorld.wit.exports.test.records
2+
{
3+
public class ToTestImpl : ITestWorld
4+
{
5+
public static (byte, ushort) MultipleResults()
6+
{
7+
return (4, 5);
8+
}
9+
10+
public static (uint, byte) SwapTuple((byte, uint) a)
11+
{
12+
return (a.Item2, a.Item1);
13+
}
14+
15+
public static IToTest.F1 RoundtripFlags1(
16+
IToTest.F1 a)
17+
{
18+
return a;
19+
}
20+
21+
public static IToTest.F2 RoundtripFlags2(
22+
IToTest.F2 a)
23+
{
24+
return a;
25+
}
26+
27+
public static (IToTest.Flag8,
28+
IToTest.Flag16,
29+
IToTest.Flag32) RoundtripFlags3(
30+
IToTest.Flag8 a,
31+
IToTest.Flag16 b,
32+
IToTest.Flag32 c)
33+
{
34+
return (a, b, c);
35+
}
36+
37+
public static IToTest.R1 RoundtripRecord1(
38+
IToTest.R1 a)
39+
{
40+
return a;
41+
}
42+
43+
public static byte Tuple1(byte a)
44+
{
45+
return a;
46+
}
47+
}
48+
}

tests/runtime-new/records/test.rs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
include!(env!("BINDINGS"));
2+
3+
use crate::exports::test::records::to_test::*;
4+
5+
pub struct Test {}
6+
7+
export!(Test);
8+
9+
impl Guest for Test {
10+
fn multiple_results() -> (u8, u16) {
11+
(4, 5)
12+
}
13+
14+
fn swap_tuple(a: (u8, u32)) -> (u32, u8) {
15+
(a.1, a.0)
16+
}
17+
18+
fn roundtrip_flags1(a: F1) -> F1 {
19+
a
20+
}
21+
22+
fn roundtrip_flags2(a: F2) -> F2 {
23+
a
24+
}
25+
26+
fn roundtrip_flags3(a: Flag8, b: Flag16, c: Flag32) -> (Flag8, Flag16, Flag32) {
27+
(a, b, c)
28+
}
29+
30+
fn roundtrip_record1(a: R1) -> R1 {
31+
a
32+
}
33+
34+
fn tuple1(a: (u8,)) -> (u8,) {
35+
(a.0,)
36+
}
37+
}

tests/runtime/records/world.wit renamed to tests/runtime-new/records/test.wit

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package test:records;
22

3-
interface test {
3+
interface to-test {
44
multiple-results: func() -> tuple<u8, u16>;
55

66
swap-tuple: func(a: tuple<u8, u32>) -> tuple<u32, u8>;
@@ -37,9 +37,10 @@ interface test {
3737
tuple1: func(a: tuple<u8>) -> tuple<u8>;
3838
}
3939

40-
world records {
41-
import test;
42-
export test;
40+
world test {
41+
export to-test;
42+
}
4343

44-
export test-imports: func();
44+
world runner {
45+
import to-test;
4546
}

tests/runtime/main.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ use wit_parser::{Resolve, WorldId, WorldItem};
1616
mod flavorful;
1717
mod options;
1818
mod ownership;
19-
mod records;
2019
mod resource_alias;
2120
mod resource_alias_redux;
2221
mod resource_borrow_export;

0 commit comments

Comments
 (0)