@@ -116,12 +116,18 @@ fn test_weakref_without_cycles() {
116
116
let w1 = s1. downgrade ( ) ;
117
117
let s2 = w1. upgrade ( ) . unwrap ( ) ;
118
118
let w2 = w1. clone ( ) ;
119
+ assert_eq ! ( s2. strong_count( ) , 2 ) ;
120
+ assert_eq ! ( s2. weak_count( ) , 2 ) ;
121
+ assert_eq ! ( w2. strong_count( ) , 2 ) ;
122
+ assert_eq ! ( w2. weak_count( ) , 2 ) ;
119
123
drop ( s1) ;
120
124
drop ( s2) ;
121
125
let w3 = w2. clone ( ) ;
122
126
assert ! ( w3. upgrade( ) . is_none( ) ) ;
123
127
assert ! ( w2. upgrade( ) . is_none( ) ) ;
124
128
assert ! ( w1. upgrade( ) . is_none( ) ) ;
129
+ assert_eq ! ( w3. strong_count( ) , 0 ) ;
130
+ assert_eq ! ( w3. weak_count( ) , 3 ) ;
125
131
} ) ;
126
132
assert_eq ! (
127
133
log,
@@ -135,13 +141,21 @@ fn test_weakref_with_cycles() {
135
141
let log = debug:: capture_log ( || {
136
142
debug:: NEXT_DEBUG_NAME . with ( |n| n. set ( 1 ) ) ;
137
143
let a: Cc < RefCell < Vec < Box < dyn Trace > > > > = Cc :: new ( RefCell :: new ( Vec :: new ( ) ) ) ;
144
+ assert_eq ! ( a. strong_count( ) , 1 ) ;
138
145
debug:: NEXT_DEBUG_NAME . with ( |n| n. set ( 2 ) ) ;
139
146
let b: Cc < RefCell < Vec < Box < dyn Trace > > > > = Cc :: new ( RefCell :: new ( Vec :: new ( ) ) ) ;
140
147
a. borrow_mut ( ) . push ( Box :: new ( b. clone ( ) ) ) ;
141
148
b. borrow_mut ( ) . push ( Box :: new ( a. clone ( ) ) ) ;
149
+ assert_eq ! ( a. strong_count( ) , 2 ) ;
150
+ assert_eq ! ( a. weak_count( ) , 0 ) ;
142
151
let wa = a. downgrade ( ) ;
152
+ assert_eq ! ( a. weak_count( ) , 1 ) ;
143
153
let wa1 = wa. clone ( ) ;
154
+ assert_eq ! ( a. weak_count( ) , 2 ) ;
144
155
let wb = b. downgrade ( ) ;
156
+ assert_eq ! ( wa. strong_count( ) , 2 ) ;
157
+ assert_eq ! ( wa. weak_count( ) , 2 ) ;
158
+ assert_eq ! ( wb. weak_count( ) , 1 ) ;
145
159
drop ( a) ;
146
160
drop ( b) ;
147
161
assert ! ( wa. upgrade( ) . is_some( ) ) ;
@@ -151,6 +165,8 @@ fn test_weakref_with_cycles() {
151
165
assert ! ( wa1. upgrade( ) . is_none( ) ) ;
152
166
assert ! ( wb. upgrade( ) . is_none( ) ) ;
153
167
assert ! ( wb. clone( ) . upgrade( ) . is_none( ) ) ;
168
+ assert_eq ! ( wa. weak_count( ) , 2 ) ;
169
+ assert_eq ! ( wa. strong_count( ) , 0 ) ;
154
170
} ) ;
155
171
assert_eq ! (
156
172
log,
0 commit comments