         groupby_column.push_back(current_key);
         aggregation_column.push_back(current_value);
 
-        // Use a STL map to keep track of the aggregation for each key
-        auto found = expected_values.find(current_key);
-
-        // Key doesn't exist yet, insert it
-        if(found == expected_values.end())
-        {
-          // To support operations like `count`, on the first insert, perform the
-          // operation on the new value and the operation's identity value and store the result
-          op_type op;
-          current_value = op(current_value, op_type::IDENTITY);
-
-          expected_values.insert(std::make_pair(current_key,current_value)); 
-
-          if(print)
-            std::cout << "First Insert of Key: " << current_key << " value: " << current_value << std::endl;
-        }
-        // Key exists, update the value with the operator
-        else
-        {
-          op_type op;
-          value_type new_value = op(current_value, found->second);
-          if(print)
-            std::cout << "Insert of Key: " << current_key << " inserting value: " << current_value 
-                      << " storing: " << new_value << std::endl;
-          found->second = new_value;
-        }
       }
     }
 


    return std::make_pair(thrust::raw_pointer_cast(d_groupby_column.data()), 
                          thrust::raw_pointer_cast(d_aggregation_column.data()));
  }

  void build_aggregation_table_device(std::pair<key_type*, value_type*> input)

  const int num_keys = 1<<12;
  const int num_values_per_key = 1;
  auto input = this->create_input(num_keys, num_values_per_key, 1000, 1000);
  this->compute_reference_solution();

  const unsigned int result_size = this->groupby(input.first, input.second);
  this->verify_groupby_result(result_size);

