   using value_type = typename TypeParam::value_type;
   using size_type = typename MapTest<TypeParam>::map_type::size_type;
 
-  std::vector<key_type>     keys   {0, 0, 0, 5, 5, 5, 10, 10, 10, 11, 12, 13};
-  std::vector<value_type>   values {0, 1, 2, 5, 5, 4, 13, 12, 11,  6, 97, 42};
-
-  thrust::device_vector<key_type> d_keys(keys);
-  thrust::device_vector<value_type> d_values(values);
-
-  key_type *k = thrust::raw_pointer_cast(d_keys.data());
-  value_type *v = thrust::raw_pointer_cast(d_values.data());
-
-  size_type input_size = keys.size();
+  const size_type input_size = this->create_input(512, 256*256);
+
+  key_type *k = thrust::raw_pointer_cast(this->d_keys.data());
+  value_type *v = thrust::raw_pointer_cast(this->d_values.data());
+
+  const dim3 grid_size ((input_size + this->THREAD_BLOCK_SIZE -1) / this->THREAD_BLOCK_SIZE,1,1);
+  const dim3 block_size (this->THREAD_BLOCK_SIZE, 1, 1);
+
+  std::cout << "Input Size: " << input_size << " Grid Size: " << grid_size.x << " Block Size: " << block_size.x << std::endl;
 
   cudaDeviceSynchronize();
-  build_table<<<1,256>>>((this->the_map).get(), k, v, input_size, max_op<value_type>());
+  build_table<<<grid_size, block_size>>>((this->the_map).get(), k, v, input_size, max_op<value_type>());
   cudaDeviceSynchronize(); 
 
-  auto found = this->the_map->find(0);
-  EXPECT_EQ(2, found->second);
-
-  found = this->the_map->find(5);
-  EXPECT_EQ(5, found->second);
-
-  found = this->the_map->find(10);
-  EXPECT_EQ(13, found->second);
-
-  found = this->the_map->find(11);
-  EXPECT_EQ(6, found->second);
-
-  found = this->the_map->find(13);
-  EXPECT_EQ(42, found->second);
-
-  found = this->the_map->find(12);
-  EXPECT_EQ(97, found->second);
+  this->check_answer();
 
 }
 

// to nest multiple types inside of the KeyValueTypes struct above
// KeyValueTypes<type1, type2> implies key_type = type1, value_type = type2
// This list is the types across which Google Test will run our tests
typedef ::testing::Types< KeyValueTypes<int,int>,
                          KeyValueTypes<int,float>,
                          KeyValueTypes<int,double>,
                          KeyValueTypes<int,long long int>,
                          KeyValueTypes<int,unsigned long long int>,
                          KeyValueTypes<unsigned long long int, int>,
                          KeyValueTypes<unsigned long long int, float>,
                          KeyValueTypes<unsigned long long int, double>,
                          KeyValueTypes<unsigned long long int, long long int>,
                          KeyValueTypes<unsigned long long int, unsigned long long int>
                          > Implementations;

TYPED_TEST_CASE(MapTest, Implementations);

TYPED_TEST(MapTest, InitialState)
{
  using key_type = typename TypeParam::key_type;


}



TYPED_TEST(MapTest, MaxAggregationTestDevice)
