   //gdf_error gdf_multi_left_join_generic(int num_cols, gdf_column **leftcol, gdf_column **rightcol, gdf_join_result_type **out_result)
 };
 
+// This structure is used to nest the join method and number/types of columns
+// for use with Google Test type-parameterized tests
 template<join_kind join_type, typename tuple_type>
 struct TestParameters
 {
+  // The method to use for the join
   const static join_kind join_method{join_type};
+
+  // The tuple of vectors that determines the number and types of the columns to join
   using multi_column_t = tuple_type;
 };
 


// Creates a gdf_column from a std::vector
template <typename col_type>
gdf_column create_gdf_column(std::vector<col_type> const & host_vector)
{
  // Copy host vector to device
  thrust::device_vector<col_type> device_vector(host_vector);

template <class test_parameters>
struct InnerJoinTest : public testing::Test
{
  const join_kind join_method = test_parameters::join_method;

  // multi_column_t is a tuple of vectors. The number of vectors in the tuple
  // determines the number of columns to be joined, and the value_type of each
  // vector determiens the data type of the column
  using multi_column_t = typename test_parameters::multi_column_t;
  multi_column_t left_columns;
  multi_column_t right_columns;

  // Containers for the gdf_columns that will be used in the gdf_join functions
  std::vector<std::unique_ptr<gdf_column>> gdf_left_columns;
  std::vector<std::unique_ptr<gdf_column>> gdf_right_columns;

  InnerJoinTest()
  {
    // Use constant seed so the psuedo-random order is the same each time
    // Each time the class is constructed a new constant seed is used
    static size_t number_of_instantiations{0};
    std::srand(number_of_instantiations++);
  }

  ~InnerJoinTest()
  {
  }

  void create_input( size_t left_column_length, size_t left_column_range,
                     size_t right_column_length, size_t right_column_range,
                     bool print = false)
  {
    initialize_tuple(left_columns, left_column_length, left_column_range); 
    initialize_tuple(right_columns, right_column_length, right_column_range); 

    if(print)
