@@ -4,7 +4,8 @@ use zerogc::GcSimpleAlloc;
4
4
use zerogc:: safepoint;
5
5
use zerogc_derive:: Trace ;
6
6
7
- use zerogc_simple:: { SimpleCollector , GcArray , Gc , CollectorId as SimpleCollectorId , GcConfig } ;
7
+ use zerogc_simple:: { SimpleCollector , GcArray , GcVec , Gc , CollectorId as SimpleCollectorId , GcConfig } ;
8
+ use zerogc:: vec:: GcRawVec ;
8
9
9
10
fn test_collector ( ) -> SimpleCollector {
10
11
let mut config = GcConfig :: default ( ) ;
@@ -22,7 +23,7 @@ struct Dummy<'gc> {
22
23
}
23
24
24
25
#[ test]
25
- fn int_array ( ) {
26
+ fn array ( ) {
26
27
let collector = test_collector ( ) ;
27
28
let mut context = collector. into_context ( ) ;
28
29
let array1 = context. alloc_slice_fill_copy ( 5 , 12u32 ) ;
@@ -55,3 +56,47 @@ fn int_array() {
55
56
}
56
57
}
57
58
}
59
+
60
+ #[ test]
61
+ fn vec ( ) {
62
+ let collector = test_collector ( ) ;
63
+ let mut context = collector. into_context ( ) ;
64
+ let mut vec1 = context. alloc_vec ( ) ;
65
+ for _ in 0 ..5 {
66
+ vec1. push ( 12u32 ) ;
67
+ }
68
+ assert_eq ! ( * vec1. as_slice( ) , * vec![ 12u32 ; 5 ] ) ;
69
+ drop ( vec1) ;
70
+ safepoint ! ( context, ( ) ) ;
71
+ const TEXT : & [ u8 ] = b"all cows eat grass" ;
72
+ let mut vec_text = context. alloc_vec ( ) ;
73
+ vec_text. extend_from_slice ( TEXT ) ;
74
+ let mut vec_none: GcVec < Option < usize > > = context. alloc_vec_with_capacity ( 12 ) ;
75
+ for _ in 0 ..12 {
76
+ vec_none. push ( None ) ;
77
+ }
78
+ for val in vec_none. iter ( ) {
79
+ assert_eq ! ( * val, None ) ;
80
+ }
81
+ drop ( vec_none) ;
82
+ let vec_text: GcVec < u8 > = GcVec { raw : safepoint ! ( context, vec_text. into_raw( ) ) , context : & context } ;
83
+ assert_eq ! ( vec_text. as_slice( ) , TEXT ) ;
84
+ let mut nested_trace: GcVec < Gc < Dummy > > = context. alloc_vec_with_capacity ( 3 ) ;
85
+ let mut last = None ;
86
+ for i in 0 ..16 {
87
+ let obj = context. alloc ( Dummy {
88
+ val : i,
89
+ inner : last
90
+ } ) ;
91
+ nested_trace. push ( obj) ;
92
+ last = Some ( obj) ;
93
+ }
94
+ drop ( vec_text) ;
95
+ let nested_trace: GcVec < Gc < Dummy > > = GcVec { raw : safepoint ! ( context, nested_trace. into_raw( ) ) , context : & context } ;
96
+ for ( idx, val) in nested_trace. iter ( ) . enumerate ( ) {
97
+ assert_eq ! ( val. val, idx, "Invalid val: {:?}" , val) ;
98
+ if let Some ( last) = val. inner {
99
+ assert_eq ! ( last. val, idx - 1 ) ;
100
+ }
101
+ }
102
+ }
0 commit comments