From 763509589dc9933d04a26e8109f90591eef1d012 Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Wed, 12 Oct 2016 23:01:48 -0400 Subject: MAINT-5232: Add LLHeteroMap to contain objects of unrelated classes. --- indra/llcommon/tests/llheteromap_test.cpp | 158 ++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 indra/llcommon/tests/llheteromap_test.cpp (limited to 'indra/llcommon/tests/llheteromap_test.cpp') diff --git a/indra/llcommon/tests/llheteromap_test.cpp b/indra/llcommon/tests/llheteromap_test.cpp new file mode 100644 index 0000000000..4f38933e50 --- /dev/null +++ b/indra/llcommon/tests/llheteromap_test.cpp @@ -0,0 +1,158 @@ +/** + * @file llheteromap_test.cpp + * @author Nat Goodspeed + * @date 2016-10-12 + * @brief Test for llheteromap. + * + * $LicenseInfo:firstyear=2016&license=viewerlgpl$ + * Copyright (c) 2016, Linden Research, Inc. + * $/LicenseInfo$ + */ + +// Precompiled header +#include "linden_common.h" +// associated header +#include "llheteromap.h" +// STL headers +#include +// std headers +// external library headers +// other Linden headers +#include "../test/lltut.h" + +static std::string clog; +static std::set dlog; + +std::ostream& operator<<(std::ostream& out, const std::set& strset) +{ + out << '{'; + const char* delim = ""; + for (std::set::const_iterator si(strset.begin()), se(strset.end()); + si != se; ++si) + { + out << delim << '"' << *si << '"'; + delim = ", "; + } + out << '}'; + return out; +} + +struct Chalk +{ + int dummy; + std::string name; + + Chalk(): + dummy(0) + { + clog.append("a"); + } + + ~Chalk() + { + dlog.insert("a"); + } + +private: + Chalk(const Chalk&); // no implementation +}; + +struct Cheese +{ + std::string name; + + Cheese() + { + clog.append("e"); + } + + ~Cheese() + { + dlog.insert("e"); + } + +private: + Cheese(const Cheese&); // no implementation +}; + +struct Chowdah +{ + char displace[17]; + std::string name; + + Chowdah() + { + displace[0] = '\0'; + clog.append("o"); + } + + ~Chowdah() + { + dlog.insert("o"); + } + +private: + Chowdah(const Chowdah&); // no implementation +}; + +/***************************************************************************** +* TUT +*****************************************************************************/ +namespace tut +{ + struct llheteromap_data + { + llheteromap_data() + { + clog.erase(); + dlog.clear(); + } + }; + typedef test_group llheteromap_group; + typedef llheteromap_group::object object; + llheteromap_group llheteromapgrp("llheteromap"); + + template<> template<> + void object::test<1>() + { + set_test_name("create, get, delete"); + + { + LLHeteroMap map; + + { + // create each instance + Chalk& chalk = map.obtain(); + chalk.name = "Chalk"; + + Cheese& cheese = map.obtain(); + cheese.name = "Cheese"; + + Chowdah& chowdah = map.obtain(); + chowdah.name = "Chowdah"; + } // refs go out of scope + + { + // verify each instance + Chalk& chalk = map.obtain(); + ensure_equals(chalk.name, "Chalk"); + + Cheese& cheese = map.obtain(); + ensure_equals(cheese.name, "Cheese"); + + Chowdah& chowdah = map.obtain(); + ensure_equals(chowdah.name, "Chowdah"); + } + } // destroy map + + // Chalk, Cheese and Chowdah should have been created in specific order + ensure_equals(clog, "aeo"); + + // We don't care what order they're destroyed in, as long as each is + // appropriately destroyed. + std::set dtorset; + for (const char* cp = "aeo"; *cp; ++cp) + dtorset.insert(std::string(1, *cp)); + ensure_equals(dlog, dtorset); + } +} // namespace tut -- cgit v1.2.3 From 23d50f53cb7beed12a1ff15f32b5c85e2b9e6b4d Mon Sep 17 00:00:00 2001 From: Nat Goodspeed Date: Thu, 13 Oct 2016 07:11:18 -0400 Subject: MAINT-5232: Ensure custom operator<<() overload is visible to TUT. --- indra/llcommon/tests/llheteromap_test.cpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'indra/llcommon/tests/llheteromap_test.cpp') diff --git a/indra/llcommon/tests/llheteromap_test.cpp b/indra/llcommon/tests/llheteromap_test.cpp index 4f38933e50..686bffb878 100644 --- a/indra/llcommon/tests/llheteromap_test.cpp +++ b/indra/llcommon/tests/llheteromap_test.cpp @@ -17,12 +17,16 @@ #include // std headers // external library headers + +// (pacify clang) +std::ostream& operator<<(std::ostream& out, const std::set& strset); // other Linden headers #include "../test/lltut.h" static std::string clog; static std::set dlog; +// want to be able to use ensure_equals() on a set std::ostream& operator<<(std::ostream& out, const std::set& strset) { out << '{'; @@ -37,6 +41,7 @@ std::ostream& operator<<(std::ostream& out, const std::set& strset) return out; } +// unrelated test classes struct Chalk { int dummy; -- cgit v1.2.3