 #include <../../src/groupby/hash/groupby_kernels.cuh>
 
 // This is necessary to do a parametrized typed-test over multiple template arguments
-template <typename Key, typename Value, typename aggregation_type>
+template <typename Key, typename Value, template <typename> typename Aggregation_Operator>
 struct KeyValueTypes
 {
   using key_type = Key;
   using value_type = Value;
-  using op_type = aggregation_type;
+  using op_type = Aggregation_Operator<value_type>;
 };
 
 // Have to use a functor instead of a device lambda because


      auto found = this->the_map->find(test_key);

      ASSERT_NE(this->the_map->end(), found);

      value_type test_value = found->second;


  using value_type = typename T::value_type;
  using op_type = typename T::op_type;
  using map_type = concurrent_unordered_map<key_type, value_type, std::numeric_limits<key_type>::max()>;
  using size_type = typename map_type::size_type;

  std::unique_ptr<map_type> the_map;

  const key_type unused_key = std::numeric_limits<key_type>::max();
  const value_type unused_value = op_type::IDENTITY;

  size_type size;

