@@ -83,3 +83,62 @@ def test_add_duplicate_key_fail(self) -> None:
8383 self .assertEqual (len (output .pte_data ), 1 )
8484 self .assertEqual (output .pte_data ["key" ], 0 )
8585 self .assertEqual (len (output .external_data ), 0 )
86+
87+ def test_merge (self ) -> None :
88+ store1 = NamedDataStore ()
89+ store1 .add_named_data ("key1" , b"data1" , None , None )
90+ store1 .add_named_data ("key2" , b"data2" , 16 , "file1" )
91+
92+ # Check items in the store1.
93+ output = store1 .get_named_data_store_output ()
94+ self .assertEqual (len (output .buffers ), 2 )
95+ self .assertEqual (len (output .pte_data ), 1 )
96+ self .assertEqual (len (output .external_data ), 1 )
97+ self .assertEqual (len (output .external_data ["file1" ]), 1 )
98+
99+ store2 = NamedDataStore ()
100+ store2 .add_named_data ("key1" , b"data1" , None , None )
101+ store2 .add_named_data ("key3" , b"data3" , None , None )
102+ store2 .add_named_data ("key4" , b"data4" , 16 , "file1" )
103+ store2 .add_named_data ("key5" , b"data5" , 16 , "file2" )
104+
105+ # Check items in store2.
106+ output2 = store2 .get_named_data_store_output ()
107+ self .assertEqual (len (output2 .buffers ), 4 )
108+ self .assertEqual (len (output2 .pte_data ), 2 )
109+ self .assertEqual (len (output2 .external_data ), 2 )
110+ self .assertEqual (len (output2 .external_data ["file1" ]), 1 )
111+ self .assertEqual (len (output2 .external_data ["file2" ]), 1 )
112+
113+ # Merge store2 into store1.
114+ store1 .merge_named_data_store (output2 )
115+
116+ # Check items in store2 are merged into store1.
117+ output = store1 .get_named_data_store_output ()
118+ # key1, data1 exist in both store1 and store2, so we only have one copy of it.
119+ self .assertEqual (len (output .buffers ), 5 )
120+ self .assertEqual (len (output .pte_data ), 2 )
121+ self .assertEqual (len (output .external_data ), 2 )
122+ self .assertEqual (len (output .external_data ["file1" ]), 2 )
123+ self .assertEqual (len (output .external_data ["file2" ]), 1 )
124+
125+ def test_merge_duplicate_error (self ) -> None :
126+ store1 = NamedDataStore ()
127+ store1 .add_named_data ("key1" , b"data1" , None , None )
128+
129+ # Check items in the store1.
130+ output = store1 .get_named_data_store_output ()
131+ self .assertEqual (len (output .buffers ), 1 )
132+ self .assertEqual (len (output .pte_data ), 1 )
133+
134+ store2 = NamedDataStore ()
135+ store2 .add_named_data ("key1" , b"data2" , None , None )
136+
137+ # Check items in store2.
138+ output2 = store2 .get_named_data_store_output ()
139+ self .assertEqual (len (output2 .buffers ), 1 )
140+ self .assertEqual (len (output2 .pte_data ), 1 )
141+
142+ # Merge store2 into store1 raises error as key1 is already in store1
143+ # with different data.
144+ self .assertRaises (ValueError , store1 .merge_named_data_store , output2 )
0 commit comments