@@ -285,3 +285,53 @@ CASE("A Stat is accessible through index operator")
285285 free (buffer);
286286 }
287287}
288+
289+ CASE (" stats names can only be MAX_NAME_LEN characters long" )
290+ {
291+ uintptr_t buffer = (uintptr_t )malloc (8192 );
292+ Statman statman_{buffer, 8192 };
293+ // ok
294+ std::string statname1 {" a.stat" };
295+ Stat& stat1 = statman_.create (Stat::UINT32, statname1);
296+ // also ok
297+ const size_t MAX_NAME_LEN {48 };
298+ std::string statname2 (MAX_NAME_LEN, ' x' );
299+ Stat& stat2 = statman_.create (Stat::UINT32, statname2);
300+ int num_stats_before = statman_.num_stats ();
301+ // not ok
302+ std::string statname3 (MAX_NAME_LEN + 1 , ' y' );
303+ EXPECT_THROWS (Stat& stat3 = statman_.create (Stat::FLOAT, statname3));
304+ int num_stats_after = statman_.num_stats ();
305+ EXPECT (num_stats_before == num_stats_after);
306+ free ((void *)buffer);
307+ }
308+
309+ CASE (" get(\" name\" ) returns reference to stat with name, throws if not present" )
310+ {
311+ uintptr_t buffer = (uintptr_t )malloc (8192 );
312+ Statman statman_ {buffer, 8192 };
313+ EXPECT_THROWS (Stat& res1 = statman_.get (" some.important.stat" ));
314+ EXPECT_THROWS (Stat& res2 = statman_.get (" other.important.stat" ));
315+ EXPECT_THROWS (Stat& res3 = statman_.get (" very.important.stat" ));
316+ Stat& stat1 = statman_.create (Stat::UINT32, " some.important.stat" );
317+ Stat& stat2 = statman_.create (Stat::UINT64, " other.important.stat" );
318+ Stat& stat3 = statman_.create (Stat::FLOAT, " very.important.stat" );
319+ ++stat1;
320+ ++stat2;
321+ ++stat3;
322+ EXPECT_NO_THROW (Stat& res1 = statman_.get (" some.important.stat" ));
323+ EXPECT_NO_THROW (Stat& res2 = statman_.get (" other.important.stat" ));
324+ EXPECT_NO_THROW (Stat& res3 = statman_.get (" very.important.stat" ));
325+ EXPECT_THROWS_AS (Stat& res5 = statman_.get (" some.missing.stat" ), Stats_exception);
326+
327+ free ((void *)buffer);
328+ }
329+
330+ CASE (" total_num_bytes() returns total number of bytes the Statman object takes up" )
331+ {
332+ uintptr_t buffer = (uintptr_t )malloc (8192 );
333+ Statman statman_ {buffer, 8192 };
334+ Stat& stat1 = statman_.create (Stat::UINT32, " some.important.stat" );
335+ EXPECT (statman_.total_num_bytes () > 8192 );
336+ free ((void *)buffer);
337+ }
0 commit comments