@@ -64,7 +64,7 @@ void populateList() {
6464 FamList lst (tester.lastRegion (), list_name);
6565 for (auto i = 0 ; i < list_size; i++) {
6666 auto buffer = makeTestData (i);
67- EXPECT_NO_THROW ( lst.pushBack (buffer.data (), buffer.size () ));
67+ lst.pushBack (buffer.data (), buffer.size ());
6868 }
6969}
7070
@@ -77,21 +77,44 @@ CASE("FamList: create an empty list and validate size, empty, front, back") {
7777 constexpr const eckit::fam::size_t region_size = 1024 ;
7878
7979 auto list_region = tester.makeRandomRegion (region_size);
80- const auto lst = FamList (list_region, list_name);
80+ const auto list = FamList (list_region, list_name);
8181
82- EXPECT (lst.empty ());
82+ // empty list should have size 0
83+ EXPECT (list.empty ());
84+ EXPECT (list.size () == 0 );
85+
86+ // front/back should throw as it's undefined behavior
87+ EXPECT_THROWS ({ auto front = list.front (); });
88+ EXPECT_THROWS ({ auto back = list.back (); });
89+ }
90+
91+ CASE (" FamList: populate a list and validate size, !empty, front, back" ) {
92+
93+ constexpr const eckit::fam::size_t region_size = 1024 ;
94+
95+ auto region = FamRegionName (fam::test_endpoint, " " )
96+ .withRegion (TestFam::makeRandomText (" LIST_REGION" ))
97+ .create (region_size, 0640 , true );
98+ auto list = FamList (region, list_name);
99+
100+ // empty list should have size 0
101+ EXPECT (list.empty ());
102+ EXPECT_EQUAL (list.size (), 0 );
103+
104+ std::string front = " Front FAM List!" ;
105+ EXPECT_NO_THROW (list.pushBack (front));
106+ EXPECT_EQUAL (list.size (), 1 );
107+ EXPECT_EQUAL (list.front ().view (), front);
108+ EXPECT_EQUAL (list.back ().view (), front);
83109
84- EXPECT (lst.size () == 0 );
85110
86- Buffer front;
87- EXPECT_NO_THROW (front = lst.front ());
88- EXPECT (front.size () == 0 );
89- EXPECT (front.data () == nullptr );
111+ std::string back = " Back FAM List!" ;
112+ EXPECT_NO_THROW (list.pushBack (back));
113+ EXPECT_EQUAL (list.size (), 2 );
114+ EXPECT_EQUAL (list.front ().view (), front);
115+ EXPECT_EQUAL (list.back ().view (), back);
90116
91- Buffer back;
92- EXPECT_NO_THROW (back = lst.back ());
93- EXPECT (back.size () == 0 );
94- EXPECT (back.data () == nullptr );
117+ region.destroy ();
95118}
96119
97120// ----------------------------------------------------------------------------------------------------------------------
@@ -102,7 +125,7 @@ CASE("FamList: populate with " + std::to_string(list_size) + " items by " + std:
102125 threads.reserve (num_threads);
103126
104127 for (auto i = 0 ; i < num_threads; i++) {
105- threads.emplace_back (populateList);
128+ EXPECT_NO_THROW ( threads.emplace_back (populateList) );
106129 }
107130
108131 for (auto && thread : threads) {
0 commit comments