 
   }
 
-  void verify_aggregation_table(){
-
-    for(auto const &expected : this->expected_values)
+  void verify_aggregation_table(std::map<key_type, value_type> const & expected_values){
+
+    for(auto const &expected : expected_values)
     {
       key_type test_key = expected.first;
 

  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();
  this->build_aggregation_table_device(input);
  this->verify_aggregation_table();
  unsigned int result_size = this->extract_groupby_result_device();
  this->verify_groupby_result(result_size);

  // The size of the result should be equal to the number of unique keys
  auto begin = this->d_groupby_column.begin();

                          thrust::raw_pointer_cast(d_aggregation_column.data()));
  }

  std::map<key_type, value_type> compute_reference_solution(bool print = false)
  {

    std::map<key_type, value_type> expected_values;

    for(size_t i = 0; i < groupby_column.size(); ++i){

      key_type current_key = groupby_column[i];
