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

        // Key exists, update the value with the operator
        else
        {
          max_op<value_type> op;
          value_type new_value = op(found->second, current_value);
          found->second = new_value;
        }

    }
  };

template<typename value_type>
  struct min_op
  {
    __host__ __device__
    value_type operator()(value_type a, value_type b)
    {
      return (a < b? a : b);
    }
  };


// A new instance of this class will be created for each *TEST(MapTest, ...)
// Put all repeated stuff for each test here
