Browse Source

It's pretty much complete... so much for commit history.

Samuel Jaffe 8 years ago
commit
937f9ab417
4 changed files with 1029 additions and 0 deletions
  1. 245 0
      bucket_hash_map.hpp
  2. 252 0
      bucket_hash_map.t.h
  3. 284 0
      bucket_hash_map.xcodeproj/project.pbxproj
  4. 248 0
      bucket_hash_map_tc.cpp

+ 245 - 0
bucket_hash_map.hpp

@@ -0,0 +1,245 @@
+//
+//  bucket_hash_map.hpp
+//  bucket_hash_map
+//
+//  Created by Sam Jaffe on 2/7/17.
+//
+
+#pragma once
+
+#include <algorithm>
+#include <list>
+#include <memory>
+#include <utility>
+#include <vector>
+
+#include "iterator/join_iterator.hpp"
+
+template <typename K, typename V, typename Hash = std::hash<K>, typename KeyEqual = std::equal_to<K> >
+class bucket_hash_map;
+
+template <typename K, typename V, typename Hash, typename KeyEqual>
+class bucket_hash_map {
+public: // typedefs
+  using key_type = K;
+  using mapped_type = V;
+  using value_type = std::pair<key_type const, mapped_type>;
+  using size_type = std::size_t;
+  using difference_type = std::ptrdiff_t;
+  
+  using hasher = Hash;
+  using key_equal = KeyEqual;
+  
+  using reference = value_type &;
+  using const_reference = value_type const &;
+  using pointer = value_type *;
+  using const_pointer = value_type const *;
+  
+  using bucket_type = std::list<value_type>;
+  using impl_type = std::vector<bucket_type>;
+  
+  using iterator = joining_iterator<typename impl_type::iterator>;
+  using const_iterator = joining_iterator<typename impl_type::const_iterator>;
+  using local_iterator = typename bucket_type::iterator;
+  using local_const_iterator = typename bucket_type::const_iterator;
+  
+  static const constexpr size_type default_buckets = 10;
+  static const constexpr float default_load_factor = 1.0F;
+  static const constexpr float growth_factor = 2.0F;
+public:
+  // Construction
+  bucket_hash_map() : bucket_hash_map(default_buckets) {}
+  
+  bucket_hash_map(size_type num_buckets,
+                  hasher const & hash = hasher(),
+                  key_equal const & keq = key_equal()) :
+  buckets_(num_buckets), hasher_(hash), key_equals_(keq) {}
+  
+  template <typename InputIt>
+  bucket_hash_map(InputIt first, InputIt last,
+                  size_type num_buckets = default_buckets,
+                  hasher const & hash = hasher(),
+                  key_equal const & keq = key_equal())
+  : bucket_hash_map(num_buckets, hash, keq) {
+    insert(first, last);
+  }
+  
+  bucket_hash_map(std::initializer_list<value_type> && ilist,
+                  size_type num_buckets = default_buckets,
+                  hasher const & hash = hasher(),
+                  key_equal const & keq = key_equal())
+  : bucket_hash_map(num_buckets, hash, keq) {
+    insert(ilist);
+  }
+  
+  // Metadata
+  bool empty() const { return size() == 0; }
+  size_type size() const { return size_; }
+
+  // Iterators
+  iterator begin() { return { buckets_.begin(), buckets_.end() }; }
+  const_iterator begin() const { return cbegin(); }
+  const_iterator cbegin() const { return { buckets_.begin(), buckets_.end() }; }
+  iterator end() { return { buckets_.end(), buckets_.end() }; }
+  const_iterator end() const { return cend(); }
+  const_iterator cend() const { return { buckets_.end(), buckets_.end() }; }
+  
+  // Create
+  std::pair<iterator, bool> insert(value_type const & vt) {
+    maybe_expand(1);
+    auto lookup = lookup_impl(buckets_, vt.first);
+    auto const end = lookup.first->end();
+    bool const create = lookup.second == end;
+    if ( create ) {
+      ++size_;
+      lookup.second = lookup.first->insert(end, vt);
+    }
+    return { {lookup.first, buckets_.end(), lookup.second, end}, create };
+  }
+  iterator insert(const_iterator, value_type const & vt) {
+    return insert(vt).first;
+  }
+  template <typename InputIt>
+  void insert(InputIt first, InputIt last) {
+    maybe_expand(std::distance(first, last));
+    while (first != last) { insert(*first++); }
+  }
+  void insert(std::initializer_list<value_type> ilist) { insert(ilist.begin(), ilist.end()); }
+  
+  // Access
+  mapped_type & operator[](key_type const & key) {
+    auto lookup = lookup_impl(buckets_, key);
+    auto end = lookup.first->end();
+    if (lookup.second == end) {
+      ++size_;
+      return lookup.first->insert(lookup.second, {key, mapped_type{}})->second;
+    } else {
+      return lookup.second->second;
+    }
+  }
+  mapped_type & at(key_type const & key) {
+    auto it = find(key);
+    if (it == end()) { throw std::out_of_range{"no element at key"}; }
+    return it->second;
+  }
+  mapped_type const & at(key_type const & key) const {
+    auto it = find(key);
+    if (it == end()) { throw std::out_of_range{"no element at key"}; }
+    return it->second;
+  }
+
+  iterator find(key_type const & key) {
+    return find_impl<iterator>(buckets_, key);
+  }
+  std::pair<iterator, iterator> equal_range(key_type const & key) {
+    auto it = find(key);
+    return { it, ++iterator(it) };
+  }
+  const_iterator find(key_type const & key) const {
+    return find_impl<const_iterator>(buckets_, key);
+  }
+  std::pair<const_iterator, const_iterator> equal_range(key_type const & key) const {
+    auto it = find(key);
+    return { it, ++const_iterator(it) };
+  }
+  size_type count(key_type const & key) const { return find(key) != end(); }
+  
+  // Remove
+  iterator erase(iterator it) {
+    erase_impl(it++);
+    return it;
+  }
+  iterator erase(iterator first, iterator last) {
+    while (first != last) { first = erase(first); }
+    return last;
+  }
+  size_type erase(key_type const & key) {
+    size_type old_size = size_;
+    erase(find(key));
+    return old_size - size_; // 1 or 0
+  }
+  void clear() { erase(begin(), end()); }
+  
+  // Bucket Interaction Functions
+  local_iterator begin(size_type bkt) { return buckets_[bkt].begin(); }
+  local_const_iterator begin(size_type bkt) const { return buckets_[bkt].cbegin(); }
+  local_const_iterator cbegin(size_type bkt) const { return buckets_[bkt].cbegin(); }
+  local_iterator end(size_type bkt) { return buckets_[bkt].end(); }
+  local_const_iterator end(size_type bkt) const { return buckets_[bkt].cend(); }
+  local_const_iterator cend(size_type bkt) const { return buckets_[bkt].cend(); }
+  size_type bucket_count() const { return buckets_.size(); }
+  size_type bucket_size(size_type bkt) const { return buckets_[bkt].size(); }
+  size_type bucket(key_type const & key) const { return hasher_(key) % bucket_count(); }
+  
+  // Hash Policy
+  float load_factor() const { return static_cast<float>(size()) / bucket_count(); }
+  float max_load_factor() const { return max_load_; }
+  void max_load_factor(float max_load) { max_load_ = max_load; }
+  void rehash(size_type buckets) {
+    buckets = std::max({1UL, buckets, static_cast<size_type>(size() / max_load_factor())});
+    bucket_hash_map next{buckets, hasher_, key_equals_};
+    next.max_load_factor(max_load_factor());
+    next.insert(begin(), end());
+    swap(next);
+  }
+  void reserve(size_type count) {
+    rehash(static_cast<size_type>(count / max_load_factor()));
+  }
+  
+  void swap( bucket_hash_map & other ) {
+    using std::swap;
+    swap(size_, other.size_);
+    swap(buckets_, other.buckets_);
+    swap(max_load_, other.max_load_);
+    swap(hasher_, other.hasher_);
+    swap(key_equals_, other.key_equals_);
+  }
+  friend void swap(bucket_hash_map & lhs, bucket_hash_map & rhs) { lhs.swap(rhs); }
+private:
+  void maybe_expand(size_type add) {
+    if ( static_cast<float>(size() + add) / bucket_count() > max_load_factor() ) {
+      reserve(std::max(size() + add, static_cast<size_type>(size() * growth_factor)));
+    }
+  }
+  
+  template <typename Bucket>
+  auto lookup_impl(Bucket & bkt, key_type const & key) const -> std::pair<decltype(bkt.begin()), decltype(bkt.begin()->begin())> {
+    auto listit = bkt.begin() + bucket(key);
+    auto it = search(listit, key);
+    return {listit, it};
+  }
+  
+  template <typename Iterator>
+  auto search(Iterator lit, key_type const & key) const -> decltype(lit->begin()) {
+    for ( auto it = lit->begin(); it != lit->end(); ++it ) {
+      if ( key_equals_(key, it->first) ) { return it; }
+    }
+    return lit->end();
+  }
+  
+  template <typename Iterator, typename Bucket>
+  Iterator find_impl(Bucket & bkt, key_type const & key) const {
+    auto lookup = lookup_impl(bkt, key);
+    if (lookup.second == lookup.first->end()) {
+      return { bkt.end(), bkt.end() };
+    } else {
+      return { lookup.first, bkt.end(), lookup.second, lookup.first->end() };
+    }
+  }
+  
+  void erase_impl(iterator it) {
+    auto lit = it.join_iterator();
+    auto iter = it.element_iterator();
+    if (! lit.done() && ! iter.done() ) {
+      --size_;
+      lit->erase(iter.current());
+    }
+  }
+private: // members
+  impl_type buckets_{default_buckets};
+  hasher hasher_;
+  key_equal key_equals_;
+  //allocator_type alloc_;
+  size_type size_{0};
+  float max_load_{default_load_factor};
+};

+ 252 - 0
bucket_hash_map.t.h

@@ -0,0 +1,252 @@
+//
+//  bucket_hash_map.t.h
+//  bucket_hash_map
+//
+//  Created by Sam Jaffe on 2/7/17.
+//
+#pragma once
+
+#include <cxxtest/TestSuite.h>
+
+#include "bucket_hash_map.hpp"
+
+class bucket_hash_map_TestSuite : public CxxTest::TestSuite {
+public:
+  using hashmap = bucket_hash_map<int, int>;
+public:
+  // Construction Postconditions
+  void test_default_is_empty() {
+    TS_ASSERT( hashmap{}.empty() );
+  }
+  
+  void test_construct_from_initializer_list() {
+    hashmap hm{{0, 1}, {1, 2}, {2, 3}};
+    TS_ASSERT_EQUALS(hm.size(), 3);
+  }
+  
+  void test_swap_hashmaps() {
+    hashmap hm1{};
+    hashmap hm2{{0, 1}, {1, 2}, {2, 3}};
+    swap(hm1, hm2);
+    TS_ASSERT(hm2.empty());
+    TS_ASSERT_EQUALS(hm1.size(), 3);
+  }
+  
+  // Insertion Behaviors
+  void test_insert_elements_effects_size() {
+    hashmap hm{};
+    TS_ASSERT_THROWS_NOTHING( hm.insert({0, 1}) );
+    TS_ASSERT_EQUALS(hm.size(), 1);
+  }
+  
+  void test_insert_element_contains_expected() {
+    hashmap hm{};
+    hm.insert({0, 1});
+    TS_ASSERT_EQUALS(hm[0], 1);
+  }
+
+  void test_insert_element_return_true() {
+    hashmap hm{};
+    TS_ASSERT( hm.insert({0, 1}).second );
+  }
+  
+  void test_insert_element_return_iterator_to_elements() {
+    hashmap hm{};
+    auto it = hm.insert({0, 1}).first;
+    TS_ASSERT_EQUALS( it->first, 0 );
+    TS_ASSERT_EQUALS( it->second, 1 );
+  }
+
+  void test_insert_same_element_does_not_create_duplicate() {
+    hashmap hm{};
+    hm.insert({0, 1});
+    TS_ASSERT_THROWS_NOTHING( hm.insert({0, 1}) );
+    TS_ASSERT_EQUALS(hm.size(), 1);
+  }
+
+  void test_insert_same_element_returns_false() {
+    hashmap hm{};
+    hm.insert({0, 1});
+    TS_ASSERT( !hm.insert({0, 1}).second );
+  }
+  
+  void test_insert_same_element_return_same_iterator() {
+    hashmap hm{};
+    auto it = hm.insert({0, 1}).first;
+    TS_ASSERT_EQUALS(hm.insert({0, 2}).first, it);
+  }
+  
+  void test_can_insert_range() {
+    hashmap hm{};
+    TS_ASSERT_THROWS_NOTHING(hm.insert({{0, 1}, {0, 2}, {1, 3}}));
+  }
+
+  void test_inserted_range_contains_all_correct_elements() {
+    hashmap hm{};
+    hm.insert({{0, 1}, {0, 2}, {1, 3}});
+    TS_ASSERT_EQUALS(hm.size(), 2);
+    TS_ASSERT_EQUALS(hm[0], 1);
+    TS_ASSERT_EQUALS(hm[1], 3);
+  }
+
+  // Find/Access Behaviors
+  void test_can_find_element_in_map() {
+    hashmap hm{};
+    hm.insert({0, 1});
+    TS_ASSERT_DIFFERS(hm.find(0), hm.end());
+  }
+  
+  void test_count_element_in_map() {
+    hashmap hm{};
+    hm.insert({0, 1});
+    TS_ASSERT_EQUALS(hm.count(0), 1);
+  }
+  
+  void test_count_element_not_in_map() {
+    hashmap hm{};
+    hm.insert({0, 1});
+    TS_ASSERT_EQUALS(hm.count(1), 0);
+  }
+  
+  void test_equal_range_contains_element_if_present() {
+    hashmap hm{};
+    hm.insert({0, 1});
+    auto p = hm.equal_range(0);
+    TS_ASSERT_DIFFERS(p.first, p.second);
+    TS_ASSERT_EQUALS(std::distance(p.first, p.second), 1);
+  }
+
+  void test_equal_range_contains_end_if_absent() {
+    hashmap hm{};
+    hm.insert({0, 1});
+    auto p = hm.equal_range(1);
+    TS_ASSERT_EQUALS(p.first, p.second);
+    TS_ASSERT_EQUALS(p.first, hm.end());
+  }
+
+  void test_found_element_is_as_expected() {
+    hashmap hm{};
+    hm.insert({0, 1});
+    TS_ASSERT_EQUALS(hm.find(0)->first, 0);
+    TS_ASSERT_EQUALS(hm.find(0)->second, 1);
+  }
+
+  void test_cannot_find_fake_element() {
+    hashmap hm{};
+    hm.insert({0, 1});
+    TS_ASSERT_EQUALS(hm.find(1), hm.end());
+  }
+  
+  void test_operator_bracket_constructs_element() {
+    hashmap hm{};
+    hm[0] = 1;
+    TS_ASSERT_EQUALS(hm.size(), 1);
+  }
+  
+  void test_at_throws_on_no_key_present() {
+    hashmap hm{};
+    hm.insert({0, 1});
+    TS_ASSERT_THROWS(hm.at(1), std::out_of_range);
+  }
+  
+  void test_at_nothrow_is_element_present() {
+    hashmap hm{};
+    hm.insert({0, 1});
+    TS_ASSERT_THROWS_NOTHING(hm.at(0));
+  }
+  
+  void test_at_is_same_as_bracket_if_element_exists() {
+    hashmap hm{};
+    hm.insert({0, 1});
+    TS_ASSERT_EQUALS(hm[0], hm.at(0));
+    TS_ASSERT_EQUALS(&hm[0], &hm.at(0));
+  }
+  
+  void test_at_can_mutate_element() {
+    hashmap hm{};
+    hm.insert({0, 1});
+    hm.at(0) = 2;
+    TS_ASSERT_EQUALS(hm.find(0)->second, 2);
+  }
+  
+  // Iteration Behaviors
+  void test_iterator_advance_different() {
+    hashmap hm{};
+    hm.insert({0, 1});
+    hm.insert({1, 2});
+    auto it = hm.begin();
+    auto it2 = ++hm.begin();
+    TS_ASSERT_DIFFERS(*it, *it2);
+  }
+  
+  void test_iterator_begin_is_end_if_empty() { // Test case in join iterator for empty first element
+    hashmap hm{};
+    TS_ASSERT_EQUALS(hm.begin(), hm.end());
+  }
+  
+  void test_iterator_reaches_end() {
+    hashmap hm{};
+    hm.insert({0, 1});
+    TS_ASSERT_EQUALS(++hm.begin(), hm.end());
+  }
+  
+  // Erase Behaviors
+  void test_erasing_element_reduces_size() {
+    hashmap hm{};
+    hm.insert({0, 1});
+    TS_ASSERT_THROWS_NOTHING( hm.erase(hm.find(0)) );
+    TS_ASSERT_EQUALS(hm.size(), 0);
+  }
+
+  void test_erase_end_is_fine() {
+    hashmap hm{};
+    TS_ASSERT_THROWS_NOTHING(hm.erase(hm.end()));
+    hm.insert({0, 1});
+    TS_ASSERT_THROWS_NOTHING(hm.erase(hm.end()));
+  }
+
+  void test_erase_end_does_not_effect_size() {
+    hashmap hm{};
+    hm.insert({0, 1});
+    hm.erase(hm.end());
+    TS_ASSERT_EQUALS(hm.size(), 1);
+  }
+
+  void test_erase_end_returns_end() {
+    hashmap hm{};
+    TS_ASSERT_EQUALS(hm.erase(hm.end()), hm.end());
+  }
+  
+  void test_erase_key_missing_key_no_result() {
+    hashmap hm{};
+    TS_ASSERT_EQUALS(hm.erase(0), 0);
+  }
+
+  void test_erase_key_incorrect_key_no_result() {
+    hashmap hm{};
+    hm.insert({0, 1});
+    TS_ASSERT_EQUALS(hm.erase(1), 0);
+  }
+  
+  void test_erase_key_correct_key_one() {
+    hashmap hm{};
+    hm.insert({0, 1});
+    TS_ASSERT_EQUALS(hm.erase(0), 1);
+  }
+  
+  void test_erase_range() {
+    hashmap hm{{0, 1}, {1, 2}, {2, 3}};
+    auto it = hm.begin();
+    auto it2 = it;
+    std::advance(it2, 2);
+    TS_ASSERT_THROWS_NOTHING(hm.erase(it, it2));
+    TS_ASSERT_EQUALS(hm.size(), 1);
+  }
+  
+  void test_clear() {
+    hashmap hm{{0, 1}, {1, 2}, {2, 3}};
+    TS_ASSERT_THROWS_NOTHING(hm.clear());
+    TS_ASSERT(hm.empty());
+  }
+
+};

+ 284 - 0
bucket_hash_map.xcodeproj/project.pbxproj

@@ -0,0 +1,284 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		CD21AE101E4A130500536178 /* bucket_hash_map_tc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CD21AE0E1E4A130500536178 /* bucket_hash_map_tc.cpp */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+		CD21ADFF1E4A128F00536178 /* CopyFiles */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 2147483647;
+			dstPath = /usr/share/man/man1/;
+			dstSubfolderSpec = 0;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 1;
+		};
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+		CD21AE011E4A128F00536178 /* bucket_hash_map_tc */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = bucket_hash_map_tc; sourceTree = BUILT_PRODUCTS_DIR; };
+		CD21AE0E1E4A130500536178 /* bucket_hash_map_tc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bucket_hash_map_tc.cpp; sourceTree = "<group>"; };
+		CD21AE0F1E4A130500536178 /* bucket_hash_map.t.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bucket_hash_map.t.h; sourceTree = "<group>"; };
+		CD21AE111E4A1F2A00536178 /* bucket_hash_map.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = bucket_hash_map.hpp; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		CD21ADFE1E4A128F00536178 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		CD21ADF81E4A128F00536178 = {
+			isa = PBXGroup;
+			children = (
+				CD21AE0B1E4A12A600536178 /* src */,
+				CD21AE0C1E4A12AA00536178 /* test */,
+				CD21AE021E4A128F00536178 /* Products */,
+			);
+			sourceTree = "<group>";
+		};
+		CD21AE021E4A128F00536178 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				CD21AE011E4A128F00536178 /* bucket_hash_map_tc */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		CD21AE0B1E4A12A600536178 /* src */ = {
+			isa = PBXGroup;
+			children = (
+				CD21AE111E4A1F2A00536178 /* bucket_hash_map.hpp */,
+			);
+			name = src;
+			sourceTree = "<group>";
+		};
+		CD21AE0C1E4A12AA00536178 /* test */ = {
+			isa = PBXGroup;
+			children = (
+				CD21AE0F1E4A130500536178 /* bucket_hash_map.t.h */,
+				CD21AE0E1E4A130500536178 /* bucket_hash_map_tc.cpp */,
+			);
+			name = test;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		CD21AE001E4A128F00536178 /* bucket_hash_map_tc */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = CD21AE081E4A128F00536178 /* Build configuration list for PBXNativeTarget "bucket_hash_map_tc" */;
+			buildPhases = (
+				CD21AE0D1E4A12CF00536178 /* ShellScript */,
+				CD21ADFD1E4A128F00536178 /* Sources */,
+				CD21ADFE1E4A128F00536178 /* Frameworks */,
+				CD21ADFF1E4A128F00536178 /* CopyFiles */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = bucket_hash_map_tc;
+			productName = bucket_hash_map;
+			productReference = CD21AE011E4A128F00536178 /* bucket_hash_map_tc */;
+			productType = "com.apple.product-type.tool";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		CD21ADF91E4A128F00536178 /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 0720;
+				ORGANIZATIONNAME = "Sam Jaffe";
+				TargetAttributes = {
+					CD21AE001E4A128F00536178 = {
+						CreatedOnToolsVersion = 7.2.1;
+					};
+				};
+			};
+			buildConfigurationList = CD21ADFC1E4A128F00536178 /* Build configuration list for PBXProject "bucket_hash_map" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+			);
+			mainGroup = CD21ADF81E4A128F00536178;
+			productRefGroup = CD21AE021E4A128F00536178 /* Products */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				CD21AE001E4A128F00536178 /* bucket_hash_map_tc */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXShellScriptBuildPhase section */
+		CD21AE0D1E4A12CF00536178 /* ShellScript */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+				"$(SRCROOT)/bucket_hash_map.t.h",
+			);
+			outputPaths = (
+				"$(SRCROOT)/bucket_hash_map_tc.cpp",
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "cxxtestgen --error-printer -o bucket_hash_map_tc.cpp bucket_hash_map.t.h";
+		};
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+		CD21ADFD1E4A128F00536178 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				CD21AE101E4A130500536178 /* bucket_hash_map_tc.cpp in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+		CD21AE061E4A128F00536178 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				CODE_SIGN_IDENTITY = "-";
+				COPY_PHASE_STRIP = NO;
+				DEBUG_INFORMATION_FORMAT = dwarf;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				ENABLE_TESTABILITY = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					"DEBUG=1",
+					"$(inherited)",
+				);
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				MACOSX_DEPLOYMENT_TARGET = 10.10;
+				MTL_ENABLE_DEBUG_INFO = YES;
+				ONLY_ACTIVE_ARCH = YES;
+				SDKROOT = macosx;
+			};
+			name = Debug;
+		};
+		CD21AE071E4A128F00536178 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+				CLANG_CXX_LIBRARY = "libc++";
+				CLANG_ENABLE_MODULES = YES;
+				CLANG_ENABLE_OBJC_ARC = YES;
+				CLANG_WARN_BOOL_CONVERSION = YES;
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+				CLANG_WARN_EMPTY_BODY = YES;
+				CLANG_WARN_ENUM_CONVERSION = YES;
+				CLANG_WARN_INT_CONVERSION = YES;
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+				CLANG_WARN_UNREACHABLE_CODE = YES;
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+				CODE_SIGN_IDENTITY = "-";
+				COPY_PHASE_STRIP = NO;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				ENABLE_NS_ASSERTIONS = NO;
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_NO_COMMON_BLOCKS = YES;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				MACOSX_DEPLOYMENT_TARGET = 10.10;
+				MTL_ENABLE_DEBUG_INFO = NO;
+				SDKROOT = macosx;
+			};
+			name = Release;
+		};
+		CD21AE091E4A128F00536178 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				HEADER_SEARCH_PATHS = (
+					/usr/local/include/,
+					../,
+				);
+				PRODUCT_NAME = "$(TARGET_NAME)";
+			};
+			name = Debug;
+		};
+		CD21AE0A1E4A128F00536178 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				HEADER_SEARCH_PATHS = (
+					/usr/local/include/,
+					../,
+				);
+				PRODUCT_NAME = "$(TARGET_NAME)";
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		CD21ADFC1E4A128F00536178 /* Build configuration list for PBXProject "bucket_hash_map" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				CD21AE061E4A128F00536178 /* Debug */,
+				CD21AE071E4A128F00536178 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		CD21AE081E4A128F00536178 /* Build configuration list for PBXNativeTarget "bucket_hash_map_tc" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				CD21AE091E4A128F00536178 /* Debug */,
+				CD21AE0A1E4A128F00536178 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = CD21ADF91E4A128F00536178 /* Project object */;
+}

+ 248 - 0
bucket_hash_map_tc.cpp

@@ -0,0 +1,248 @@
+/* Generated file, do not edit */
+
+#ifndef CXXTEST_RUNNING
+#define CXXTEST_RUNNING
+#endif
+
+#define _CXXTEST_HAVE_STD
+#define _CXXTEST_HAVE_EH
+#include <cxxtest/TestListener.h>
+#include <cxxtest/TestTracker.h>
+#include <cxxtest/TestRunner.h>
+#include <cxxtest/RealDescriptions.h>
+#include <cxxtest/TestMain.h>
+#include <cxxtest/ErrorPrinter.h>
+
+int main( int argc, char *argv[] ) {
+ int status;
+    CxxTest::ErrorPrinter tmp;
+    CxxTest::RealWorldDescription::_worldName = "cxxtest";
+    status = CxxTest::Main< CxxTest::ErrorPrinter >( tmp, argc, argv );
+    return status;
+}
+bool suite_bucket_hash_map_TestSuite_init = false;
+#include "bucket_hash_map.t.h"
+
+static bucket_hash_map_TestSuite suite_bucket_hash_map_TestSuite;
+
+static CxxTest::List Tests_bucket_hash_map_TestSuite = { 0, 0 };
+CxxTest::StaticSuiteDescription suiteDescription_bucket_hash_map_TestSuite( "bucket_hash_map.t.h", 13, "bucket_hash_map_TestSuite", suite_bucket_hash_map_TestSuite, Tests_bucket_hash_map_TestSuite );
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_default_is_empty : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_default_is_empty() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 18, "test_default_is_empty" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_default_is_empty(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_default_is_empty;
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_construct_from_initializer_list : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_construct_from_initializer_list() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 22, "test_construct_from_initializer_list" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_construct_from_initializer_list(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_construct_from_initializer_list;
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_swap_hashmaps : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_swap_hashmaps() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 27, "test_swap_hashmaps" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_swap_hashmaps(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_swap_hashmaps;
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_insert_elements_effects_size : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_insert_elements_effects_size() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 36, "test_insert_elements_effects_size" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_insert_elements_effects_size(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_insert_elements_effects_size;
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_insert_element_contains_expected : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_insert_element_contains_expected() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 42, "test_insert_element_contains_expected" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_insert_element_contains_expected(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_insert_element_contains_expected;
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_insert_element_return_true : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_insert_element_return_true() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 48, "test_insert_element_return_true" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_insert_element_return_true(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_insert_element_return_true;
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_insert_element_return_iterator_to_elements : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_insert_element_return_iterator_to_elements() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 53, "test_insert_element_return_iterator_to_elements" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_insert_element_return_iterator_to_elements(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_insert_element_return_iterator_to_elements;
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_insert_same_element_does_not_create_duplicate : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_insert_same_element_does_not_create_duplicate() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 60, "test_insert_same_element_does_not_create_duplicate" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_insert_same_element_does_not_create_duplicate(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_insert_same_element_does_not_create_duplicate;
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_insert_same_element_returns_false : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_insert_same_element_returns_false() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 67, "test_insert_same_element_returns_false" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_insert_same_element_returns_false(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_insert_same_element_returns_false;
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_insert_same_element_return_same_iterator : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_insert_same_element_return_same_iterator() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 73, "test_insert_same_element_return_same_iterator" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_insert_same_element_return_same_iterator(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_insert_same_element_return_same_iterator;
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_can_insert_range : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_can_insert_range() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 79, "test_can_insert_range" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_can_insert_range(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_can_insert_range;
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_inserted_range_contains_all_correct_elements : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_inserted_range_contains_all_correct_elements() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 84, "test_inserted_range_contains_all_correct_elements" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_inserted_range_contains_all_correct_elements(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_inserted_range_contains_all_correct_elements;
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_can_find_element_in_map : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_can_find_element_in_map() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 93, "test_can_find_element_in_map" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_can_find_element_in_map(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_can_find_element_in_map;
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_count_element_in_map : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_count_element_in_map() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 99, "test_count_element_in_map" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_count_element_in_map(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_count_element_in_map;
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_count_element_not_in_map : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_count_element_not_in_map() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 105, "test_count_element_not_in_map" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_count_element_not_in_map(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_count_element_not_in_map;
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_equal_range_contains_element_if_present : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_equal_range_contains_element_if_present() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 111, "test_equal_range_contains_element_if_present" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_equal_range_contains_element_if_present(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_equal_range_contains_element_if_present;
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_equal_range_contains_end_if_absent : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_equal_range_contains_end_if_absent() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 119, "test_equal_range_contains_end_if_absent" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_equal_range_contains_end_if_absent(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_equal_range_contains_end_if_absent;
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_found_element_is_as_expected : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_found_element_is_as_expected() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 127, "test_found_element_is_as_expected" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_found_element_is_as_expected(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_found_element_is_as_expected;
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_cannot_find_fake_element : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_cannot_find_fake_element() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 134, "test_cannot_find_fake_element" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_cannot_find_fake_element(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_cannot_find_fake_element;
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_operator_bracket_constructs_element : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_operator_bracket_constructs_element() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 140, "test_operator_bracket_constructs_element" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_operator_bracket_constructs_element(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_operator_bracket_constructs_element;
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_at_throws_on_no_key_present : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_at_throws_on_no_key_present() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 146, "test_at_throws_on_no_key_present" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_at_throws_on_no_key_present(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_at_throws_on_no_key_present;
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_at_nothrow_is_element_present : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_at_nothrow_is_element_present() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 152, "test_at_nothrow_is_element_present" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_at_nothrow_is_element_present(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_at_nothrow_is_element_present;
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_at_is_same_as_bracket_if_element_exists : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_at_is_same_as_bracket_if_element_exists() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 158, "test_at_is_same_as_bracket_if_element_exists" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_at_is_same_as_bracket_if_element_exists(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_at_is_same_as_bracket_if_element_exists;
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_at_can_mutate_element : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_at_can_mutate_element() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 165, "test_at_can_mutate_element" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_at_can_mutate_element(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_at_can_mutate_element;
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_iterator_advance_different : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_iterator_advance_different() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 173, "test_iterator_advance_different" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_iterator_advance_different(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_iterator_advance_different;
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_iterator_begin_is_end_if_empty : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_iterator_begin_is_end_if_empty() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 182, "test_iterator_begin_is_end_if_empty" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_iterator_begin_is_end_if_empty(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_iterator_begin_is_end_if_empty;
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_iterator_reaches_end : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_iterator_reaches_end() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 187, "test_iterator_reaches_end" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_iterator_reaches_end(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_iterator_reaches_end;
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_erasing_element_reduces_size : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_erasing_element_reduces_size() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 194, "test_erasing_element_reduces_size" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_erasing_element_reduces_size(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_erasing_element_reduces_size;
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_erase_end_is_fine : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_erase_end_is_fine() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 201, "test_erase_end_is_fine" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_erase_end_is_fine(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_erase_end_is_fine;
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_erase_end_does_not_effect_size : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_erase_end_does_not_effect_size() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 208, "test_erase_end_does_not_effect_size" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_erase_end_does_not_effect_size(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_erase_end_does_not_effect_size;
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_erase_end_returns_end : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_erase_end_returns_end() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 215, "test_erase_end_returns_end" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_erase_end_returns_end(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_erase_end_returns_end;
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_erase_key_missing_key_no_result : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_erase_key_missing_key_no_result() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 220, "test_erase_key_missing_key_no_result" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_erase_key_missing_key_no_result(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_erase_key_missing_key_no_result;
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_erase_key_incorrect_key_no_result : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_erase_key_incorrect_key_no_result() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 225, "test_erase_key_incorrect_key_no_result" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_erase_key_incorrect_key_no_result(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_erase_key_incorrect_key_no_result;
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_erase_key_correct_key_one : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_erase_key_correct_key_one() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 231, "test_erase_key_correct_key_one" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_erase_key_correct_key_one(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_erase_key_correct_key_one;
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_erase_range : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_erase_range() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 237, "test_erase_range" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_erase_range(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_erase_range;
+
+static class TestDescription_suite_bucket_hash_map_TestSuite_test_clear : public CxxTest::RealTestDescription {
+public:
+ TestDescription_suite_bucket_hash_map_TestSuite_test_clear() : CxxTest::RealTestDescription( Tests_bucket_hash_map_TestSuite, suiteDescription_bucket_hash_map_TestSuite, 246, "test_clear" ) {}
+ void runTest() { suite_bucket_hash_map_TestSuite.test_clear(); }
+} testDescription_suite_bucket_hash_map_TestSuite_test_clear;
+
+#include <cxxtest/Root.cpp>
+const char* CxxTest::RealWorldDescription::_worldName = "cxxtest";