@@ -169,9 +169,15 @@ fn get_data_from_edge_table() {
169169#[ test]
170170fn test_adding_node_table_row_with_defaults ( ) {
171171 let mut tables = tskit:: TableCollection :: new ( 10. ) . unwrap ( ) ;
172+ // ANCHOR: node_defaults
172173 let defaults = tskit:: NodeDefaults :: default ( ) ;
174+ // ANCHOR_END: node_defaults
175+ // ANCHOR: add_node_defaults
173176 let node = tables. add_node_with_defaults ( 0.0 , & defaults) . unwrap ( ) ;
177+ // ANCHOR_END: add_node_defaults
174178 assert_eq ! ( node, 0 ) ;
179+
180+ // ANCHOR: add_node_defaults_sample
175181 let node = tables
176182 . add_node_with_defaults (
177183 0.0 ,
@@ -184,6 +190,7 @@ fn test_adding_node_table_row_with_defaults() {
184190 } ,
185191 )
186192 . unwrap ( ) ;
193+ // ANCHOR_END: add_node_defaults_sample
187194 assert ! ( tables. nodes( ) . flags( node) . unwrap( ) . is_sample( ) ) ;
188195}
189196
@@ -215,15 +222,17 @@ macro_rules! impl_node_metadata_traits {
215222}
216223
217224mod node_metadata {
218- #[ derive( serde:: Serialize , serde:: Deserialize ) ]
225+ #[ derive( Debug , serde:: Serialize , serde:: Deserialize , Eq , PartialEq ) ]
226+ // ANCHOR: node_metadata
219227 pub struct NodeMetadata {
220228 pub value : i32 ,
221229 }
230+ // ANCHOR_END: node_metadata
222231 impl_node_metadata_traits ! ( ) ;
223232}
224233
225234mod node_metadata_clone {
226- #[ derive( Clone , serde:: Serialize , serde:: Deserialize ) ]
235+ #[ derive( Debug , Eq , PartialEq , Clone , serde:: Serialize , serde:: Deserialize ) ]
227236 pub struct NodeMetadata {
228237 pub value : i32 ,
229238 }
@@ -234,10 +243,18 @@ mod node_metadata_clone {
234243fn test_adding_node_table_row_with_defaults_and_metadata ( ) {
235244 use node_metadata:: NodeMetadata ;
236245 let mut tables = tskit:: TableCollection :: new ( 10.0 ) . unwrap ( ) ;
246+ // ANCHOR: node_defaults_with_metadata
247+
248+ // Create a type alias for brevity
237249 type DefaultsWithMetadata = tskit:: NodeDefaultsWithMetadata < NodeMetadata > ;
250+ // Default metadata is None
238251 let defaults = DefaultsWithMetadata :: default ( ) ;
239- let _ = tables. add_node_with_defaults ( 0.0 , & defaults) . unwrap ( ) ;
240- let _ = tables
252+
253+ // A row with no metadata
254+ let n0 = tables. add_node_with_defaults ( 0.0 , & defaults) . unwrap ( ) ;
255+
256+ // A row with metadata
257+ let n1 = tables
241258 . add_node_with_defaults (
242259 0.0 ,
243260 & DefaultsWithMetadata {
@@ -247,32 +264,54 @@ fn test_adding_node_table_row_with_defaults_and_metadata() {
247264 } ,
248265 )
249266 . unwrap ( ) ;
250- let _ = tables
267+
268+ // Another row with metadata, different from the last.
269+ let n2 = tables
251270 . add_node_with_defaults (
252271 0.0 ,
253272 & DefaultsWithMetadata {
254- population : 3 . into ( ) ,
255- metadata : Some ( NodeMetadata { value : 42 } ) ,
273+ population : 1 . into ( ) ,
274+ metadata : Some ( NodeMetadata { value : 1234 } ) ,
256275 ..defaults
257276 } ,
258277 )
259278 . unwrap ( ) ;
279+ // ANCHOR_END: node_defaults_with_metadata
280+ assert ! ( tables. nodes( ) . metadata:: <NodeMetadata >( n0) . is_none( ) ) ;
281+ assert_eq ! (
282+ tables
283+ . nodes( )
284+ . metadata:: <NodeMetadata >( n1)
285+ . unwrap( )
286+ . unwrap( ) ,
287+ NodeMetadata { value: 42 }
288+ ) ;
289+ assert_eq ! (
290+ tables
291+ . nodes( )
292+ . metadata:: <NodeMetadata >( n2)
293+ . unwrap( )
294+ . unwrap( ) ,
295+ NodeMetadata { value: 1234 }
296+ ) ;
260297}
261298
262299#[ test]
263300fn test_adding_node_table_row_with_defaults_and_metadata_requiring_clone ( ) {
264301 use node_metadata_clone:: NodeMetadata ;
265302 let mut tables = tskit:: TableCollection :: new ( 10.0 ) . unwrap ( ) ;
266303 type DefaultsWithMetadata = tskit:: NodeDefaultsWithMetadata < NodeMetadata > ;
304+
305+ // ANCHOR: node_defaults_with_some_metadata_default
267306 // What if there is default metadata for all rows?
268307 let defaults = DefaultsWithMetadata {
269308 metadata : Some ( NodeMetadata { value : 42 } ) ,
270309 ..Default :: default ( )
271310 } ;
311+ // ANCHOR_END: node_defaults_with_some_metadata_default
272312
273- // We can scoop all non-metadata fields even though
274- // type is not Copy/Clone
275- let _ = tables
313+ // ANCHOR: node_defaults_with_some_metadata_default_add_first_row
314+ let n0 = tables
276315 . add_node_with_defaults (
277316 0.0 ,
278317 & DefaultsWithMetadata {
@@ -281,11 +320,21 @@ fn test_adding_node_table_row_with_defaults_and_metadata_requiring_clone() {
281320 } ,
282321 )
283322 . unwrap ( ) ;
323+ // ANCHOR_END: node_defaults_with_some_metadata_default_add_first_row
324+ assert_eq ! (
325+ tables
326+ . nodes( )
327+ . metadata:: <NodeMetadata >( n0)
328+ . unwrap( )
329+ . unwrap( ) ,
330+ NodeMetadata { value: 2 * 42 }
331+ ) ;
284332
285333 // But now, we start to cause a problem:
286334 // If we don't clone here, our metadata type moves,
287335 // so our defaults are moved.
288- let _ = tables
336+ // ANCHOR: node_defaults_with_some_metadata_default_add_second_row
337+ let n1 = tables
289338 . add_node_with_defaults (
290339 0.0 ,
291340 & DefaultsWithMetadata {
@@ -294,10 +343,20 @@ fn test_adding_node_table_row_with_defaults_and_metadata_requiring_clone() {
294343 } ,
295344 )
296345 . unwrap ( ) ;
346+ // ANCHOR_END: node_defaults_with_some_metadata_default_add_second_row
347+ assert_eq ! (
348+ tables
349+ . nodes( )
350+ . metadata:: <NodeMetadata >( n1)
351+ . unwrap( )
352+ . unwrap( ) ,
353+ NodeMetadata { value: 42 }
354+ ) ;
297355
298356 // Now, we have a use-after-move error
299357 // if we hadn't cloned in the last step.
300- let _ = tables
358+ // ANCHOR: node_defaults_with_some_metadata_default_add_third_row
359+ let n2 = tables
301360 . add_node_with_defaults (
302361 0.0 ,
303362 & DefaultsWithMetadata {
@@ -306,4 +365,13 @@ fn test_adding_node_table_row_with_defaults_and_metadata_requiring_clone() {
306365 } ,
307366 )
308367 . unwrap ( ) ;
368+ // ANCHOR_END: node_defaults_with_some_metadata_default_add_third_row
369+ assert_eq ! (
370+ tables
371+ . nodes( )
372+ . metadata:: <NodeMetadata >( n2)
373+ . unwrap( )
374+ . unwrap( ) ,
375+ NodeMetadata { value: 42 }
376+ ) ;
309377}
0 commit comments