| 
									
										
										
										
											2008-05-20 15:24:20 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-09 20:56:23 +00:00
										 |  |  | // Copyright 2008-2009 Daniel James.
 | 
					
						
							| 
									
										
										
										
											2008-05-20 15:24:20 +00:00
										 |  |  | // Distributed under the Boost Software License, Version 1.0. (See accompanying
 | 
					
						
							|  |  |  | // file LICENSE_1_0.txt or move at http://www.boost.org/LICENSE_1_0.txt)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if !defined(BOOST_UNORDERED_TEST_HELPERS_COUNT_HEAD)
 | 
					
						
							|  |  |  | #define BOOST_UNORDERED_TEST_HELPERS_COUNT_HEAD
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-19 13:05:17 +00:00
										 |  |  | #include <boost/detail/lightweight_test.hpp>
 | 
					
						
							| 
									
										
										
										
											2009-04-14 17:51:34 +00:00
										 |  |  | #include <iostream>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-20 15:24:20 +00:00
										 |  |  | namespace test { | 
					
						
							| 
									
										
										
										
											2017-02-19 13:05:17 +00:00
										 |  |  | struct object_count | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     int instances; | 
					
						
							|  |  |  |     int constructions; | 
					
						
							| 
									
										
										
										
											2008-05-20 15:24:20 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-19 13:05:17 +00:00
										 |  |  |     object_count() : instances(0), constructions(0) {} | 
					
						
							|  |  |  |     void reset() { *this = object_count(); } | 
					
						
							| 
									
										
										
										
											2008-05-20 15:24:20 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-19 13:05:17 +00:00
										 |  |  |     void construct() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         ++instances; | 
					
						
							|  |  |  |         ++constructions; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2008-05-20 15:24:20 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-19 13:05:17 +00:00
										 |  |  |     void destruct() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if (instances == 0) { | 
					
						
							|  |  |  |             BOOST_ERROR("Unbalanced constructions."); | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             --instances; | 
					
						
							| 
									
										
										
										
											2008-05-20 15:24:20 +00:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2017-02-19 13:05:17 +00:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2008-05-20 15:24:20 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-19 13:05:17 +00:00
										 |  |  |     bool operator==(object_count const& x) const | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return instances == x.instances && constructions == x.constructions; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2008-05-20 15:24:20 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-19 13:05:17 +00:00
										 |  |  |     bool operator!=(object_count const& x) const { return !(*this == x); } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     friend std::ostream& operator<<(std::ostream& out, object_count const& c) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         out << "[instances: " << c.instances | 
					
						
							|  |  |  |             << ", constructions: " << c.constructions << "]"; | 
					
						
							|  |  |  |         return out; | 
					
						
							| 
									
										
										
										
											2008-05-20 15:24:20 +00:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-02-19 13:05:17 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // This won't be a problem as I'm only using a single compile unit
 | 
					
						
							|  |  |  | // in each test (this is actually require by the minimal test
 | 
					
						
							|  |  |  | // framework).
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // boostinspect:nounnamed
 | 
					
						
							|  |  |  | namespace { | 
					
						
							|  |  |  | object_count global_object_count; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct counted_object | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     counted_object() { global_object_count.construct(); } | 
					
						
							|  |  |  |     counted_object(counted_object const&) { global_object_count.construct(); } | 
					
						
							|  |  |  |     ~counted_object() { global_object_count.destruct(); } | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct check_instances | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     int instances_; | 
					
						
							|  |  |  |     int constructions_; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     check_instances() | 
					
						
							|  |  |  |         : instances_(global_object_count.instances), | 
					
						
							|  |  |  |           constructions_(global_object_count.constructions) | 
					
						
							| 
									
										
										
										
											2012-07-08 11:54:47 +00:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2017-02-19 13:05:17 +00:00
										 |  |  |     } | 
					
						
							|  |  |  |     ~check_instances() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         BOOST_TEST(global_object_count.instances == instances_); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     int instances() const { return global_object_count.instances - instances_; } | 
					
						
							|  |  |  |     int constructions() const | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return global_object_count.constructions - constructions_; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2008-05-20 15:24:20 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif
 |