コード例 #1
0
int
main(int argc, char ** argv) {
    generate_test_case(atoi(argv[1]), argv[2]);               
}
コード例 #2
0
void test(size_t n)
{
  std::vector<int> keys(n);
  std::vector<int> values(n, 1);

  std::cout << "generating test case for n = " << n << "... " << std::flush;
  generate_test_case(keys.begin(), keys.end(), values.begin());
  std::cout << "done." << std::endl;

  // silence for large n
  if(n < 100)
  {
    std::clog.rdbuf((n < 100) ? std::clog.rdbuf() : 0);

    std::clog << "test(): keys      : ";
    std::copy(keys.begin(), keys.end(), std::ostream_iterator<int>(std::clog, " "));
    std::clog << std::endl;

    std::clog << "test(): tail_flags: ";
    auto flags = make_tail_flags(keys.begin(), keys.end());
    std::copy(flags.begin(), flags.end(), std::ostream_iterator<int>(std::clog, " "));
    std::clog << std::endl;

    std::clog << "test(): values: ";
    std::copy(values.begin(), values.end(), std::ostream_iterator<int>(std::clog, " "));
    std::clog << std::endl;
  }

  std::vector<int> keys_result(n);
  std::vector<int> values_result(n, 13);

  auto ends = experimental::reduce_by_key(keys.begin(), keys.end(), values.begin(), keys_result.begin(), values_result.begin(), thrust::equal_to<int>(), thrust::plus<int>());
  keys_result.erase(ends.first, keys_result.end());
  values_result.erase(ends.second, values_result.end());

  if(n < 100)
  {
    std::clog << "test(): keys_result: ";
    std::copy(keys_result.begin(), keys_result.end(), std::ostream_iterator<int>(std::clog, " "));
    std::clog << std::endl;

    std::clog << "test(): values_result: ";
    std::copy(values_result.begin(), values_result.end(), std::ostream_iterator<int>(std::clog, " "));
    std::clog << std::endl;
  }

  std::vector<int> keys_result_reference(n);
  std::vector<int> values_result_reference(n);
  auto ends1 = thrust::reduce_by_key(keys.begin(), keys.end(), values.begin(), keys_result_reference.begin(), values_result_reference.begin());
  keys_result_reference.erase(ends1.first, keys_result_reference.end());
  values_result_reference.erase(ends1.second, values_result_reference.end());

  if(n < 100)
  {
    std::clog << "test(): keys_result_reference: ";
    std::copy(keys_result_reference.begin(), keys_result_reference.end(), std::ostream_iterator<int>(std::clog, " "));
    std::clog << std::endl;

    std::clog << "test(): values_result_reference: ";
    std::copy(values_result_reference.begin(), values_result_reference.end(), std::ostream_iterator<int>(std::clog, " "));
    std::clog << std::endl;
  }

  assert(keys_result_reference == keys_result);
  assert(values_result_reference == values_result);

  std::cout << "test passed." << std::endl;
}