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

// 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,max_op<int>>,
                          KeyValueTypes<int,float,max_op<float>>,
                          KeyValueTypes<int,double,max_op<double>>,
                          KeyValueTypes<int,long long int,max_op<long long int>>,
                          KeyValueTypes<int,unsigned long long int,max_op<unsigned long long int>>,
                          KeyValueTypes<unsigned long long int, int,max_op<int>>,
                          KeyValueTypes<unsigned long long int, float,max_op<float>>,
                          KeyValueTypes<unsigned long long int, double,max_op<double>>,
                          KeyValueTypes<unsigned long long int, long long int,max_op<long long int>>,
                          KeyValueTypes<unsigned long long int, unsigned long long int,max_op<unsigned long long int>>,
                          KeyValueTypes<int,int,min_op<int>>,
                          KeyValueTypes<int,float,min_op<float>>,
                          KeyValueTypes<int,double,min_op<double>>,
                          KeyValueTypes<int,long long int,min_op<long long int>>,
                          KeyValueTypes<int,unsigned long long int,min_op<unsigned long long int>>,
                          KeyValueTypes<unsigned long long int, int,min_op<int>>,
                          KeyValueTypes<unsigned long long int, float,min_op<float>>,
                          KeyValueTypes<unsigned long long int, double,min_op<double>>,
                          KeyValueTypes<unsigned long long int, long long int,min_op<long long int>>,
                          KeyValueTypes<unsigned long long int, unsigned long long int,min_op<unsigned long long int>>
                          > Implementations;

TYPED_TEST_CASE(MapTest, Implementations);

  EXPECT_EQ(begin->first, this->unused_key);
  EXPECT_EQ(begin->second, this->unused_value);
}

TYPED_TEST(MapTest, AggregationTestHost)
{
