pub interface ReaderWriter { read(mut buf []u8) ?int // from Reader write(buf []u8) ?int // from Writer } interface Speaker { // first speak() string // between foo() string foo2() string // last } interface Baz { // first speak() string // comment // more between foo() string foo2() string // last } interface Bar { speak() string // after foo() string speak2() string // also after // and between foo2() string } interface TestsRunner { mut: fn_passes u64 fn_fails u64 assert_passes u64 assert_fails u64 test_fn_info &TestFnMetaInfo // filled in by generated code, before .fn_start() is called. start(ntests int) // called before all tests, you can initialise private data here. ntests is the number of test functions in the _test.v file. finish() // called after all tests are finished, you should free all the private data here. // fn_start() // called at the start of each test_ function fn_pass() // called at the end of each test_ function, with no failed assertion fn_error(line_nr int, file string, mod string, fn_name string, errmsg string) // called only for `fn test_xyz() ? { return error('message') }` fn_fail() // called at the end of each test_ function, with a failed assertion, *or* returning an error // assert_pass(i &AssertMetaInfo) // called for each `assert true` assert_fail(i &AssertMetaInfo) // called for each `assert false` }