v2 / vlib / v / tests / generics / generics_mutual_recursive_struct_reference_test.v
41 lines · 33 sloc · 766 bytes · 5a4810b4064169bbb05803b6eed8e9b50c2ac6e3
Raw
1struct Foo[T] {
2 bar ?&Bar[T]
3}
4
5struct Bar[T] {
6 foo ?&Foo[T]
7}
8
9fn foo_new[T]() &Foo[T] {
10 return &Foo[T]{}
11}
12
13fn test_mutual_recursive_generic_struct_reference() {
14 foo := foo_new[int]()
15 assert foo != unsafe { nil }
16}
17
18pub struct Issue26675List[T] {
19 front ?&Issue26675ListNode[T]
20 back ?&Issue26675ListNode[T]
21}
22
23pub struct Issue26675ListNode[T] {
24 value T
25 list ?&Issue26675List[T]
26 prev ?&Issue26675ListNode[T]
27 next ?&Issue26675ListNode[T]
28}
29
30pub fn Issue26675ListNode.new[T]() &Issue26675ListNode[T] {
31 return &Issue26675ListNode[T]{}
32}
33
34struct Issue26675Foo {
35 node &Issue26675ListNode[Issue26675Foo]
36}
37
38fn test_recursive_generic_struct_instantiation_does_not_crash() {
39 node := Issue26675ListNode.new[Issue26675Foo]()
40 assert node != unsafe { nil }
41}
42