@@ -239,6 +239,57 @@ TEST_F (OdTest, StoreThenLoadOD)
239239 EXPECT_EQ (0x12345678u , value);
240240}
241241
242+ TEST_F (OdTest, StoreThenLoadNewOD)
243+ {
244+ uint32_t value2000_01;
245+ uint32_t value2000_02;
246+ char str2001[16 ];
247+ char expect_str2001[sizeof (str2001)] = {0 };
248+ const co_entry_t OD2000_1[] = {
249+ {0x00 , OD_RO, DTYPE_UNSIGNED8, 8 , 0x02 , NULL },
250+ {0x01 , OD_RW, DTYPE_UNSIGNED32, 32 , 0 , &value2000_01},
251+ {0x02 , OD_RW, DTYPE_UNSIGNED16, 16 , 0 , &value2000_02},
252+ };
253+ co_entry_t OD2001_1[] = {
254+ {0 , OD_RW, DTYPE_VISIBLE_STRING, 8 * sizeof (str2001), 0 , str2001},
255+ };
256+ const co_obj_t OD1[] = {
257+ {0x2000 , OTYPE_RECORD, 2 , OD2000_1, NULL },
258+ {0x2001 , OTYPE_VAR, 0 , OD2001_1, NULL },
259+ {0 , OTYPE_NULL, 0 , NULL , NULL },
260+ };
261+ const co_entry_t OD2000_2[12 ] = {
262+ {0x00 , OD_RO, DTYPE_UNSIGNED8, 8 , 0x02 , NULL },
263+ {0x01 , OD_RW, DTYPE_UNSIGNED16, 16 , 0 , &value2000_01}, // Grows
264+ {0x02 , OD_RW, DTYPE_UNSIGNED32, 32 , 0 , &value2000_02}, // Shrinks
265+ };
266+ co_entry_t OD2001_2[] = {
267+ // Shrinks, should discard data
268+ {0 , OD_RW, DTYPE_VISIBLE_STRING, 8 * (sizeof (str2001) - 1 ), 0 , str2001},
269+ };
270+ const co_obj_t OD2[] = {
271+ {0x2000 , OTYPE_RECORD, 2 , OD2000_2, NULL },
272+ {0x2001 , OTYPE_VAR, 0 , OD2001_2, NULL },
273+ {0 , OTYPE_NULL, 0 , NULL , NULL },
274+ };
275+
276+ net.od = OD1;
277+ value2000_01 = 0xFFFFFFFF ;
278+ value2000_02 = 0xFFFF ;
279+ memset (str2001, 0xFF , sizeof (str2001));
280+ co_od_store (&net, CO_STORE_APP, 0x2000 , 0x2FFF );
281+
282+ value2000_01 = 0xAAAAAAAA ;
283+ value2000_02 = 0x55555555 ;
284+ memset (str2001, 0xAA , sizeof (str2001));
285+
286+ net.od = OD2;
287+ co_od_reset (&net, CO_STORE_APP, 0x2000 , 0x2FFF );
288+ EXPECT_EQ (0xAAAAFFFFu , value2000_01);
289+ EXPECT_EQ (0x0000FFFFu , value2000_02);
290+ EXPECT_EQ (0 , memcmp (expect_str2001, str2001, sizeof (str2001) - 1 ));
291+ }
292+
242293TEST_F (OdTest, OD1010)
243294{
244295 const co_obj_t * obj1010 = find_obj (0x1010 );
0 commit comments