createdata.cxx 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #include <cstdio>
  2. #include <iostream>
  3. #include <random>
  4. #include <string>
  5. #include "json.hpp"
  6. int main(int argc, char** argv) {
  7. if (argc != 3) {
  8. printf("Usage: %s numSamples arraySize\n", argv[0]);
  9. return EXIT_FAILURE;
  10. }
  11. nlohmann::json result;
  12. unsigned int numSamples = 0, arraySize = 0;
  13. if (sscanf(argv[1], "%u", &numSamples) != 1 || sscanf(argv[2], "%u", &arraySize) != 1) {
  14. printf("numSamples and arraySize must be positive integers\n");
  15. return EXIT_FAILURE;
  16. }
  17. // C++11 random number tutorial: https://gist.github.com/PhDP/5289449
  18. // Seed random number generator
  19. std::random_device rd;
  20. std::mt19937_64 rng(rd());
  21. // Create uniform distribution
  22. std::uniform_int_distribution<int> unif(
  23. std::numeric_limits<int>::min(), std::numeric_limits<int>::max());
  24. nlohmann::json samples;
  25. samples["metadata"]["numSamples"] = numSamples;
  26. samples["metadata"]["arraySize"] = arraySize;
  27. unsigned int totalZeros = (int) floor(log10((double) numSamples)) + 1;
  28. for (unsigned int sample = 1; sample <= numSamples; sample++) {
  29. int sampleZeros = (int) floor(log10((double) sample)) + 1;
  30. std::string sampleNum = std::string(totalZeros - sampleZeros, '0').append(std::to_string(sample));
  31. nlohmann::json result;
  32. // On size_t usage here: https://stackoverflow.com/questions/131803/unsigned-int-vs-size-t
  33. for (size_t i = 0; i < arraySize; i++) {
  34. // Add random integer to array
  35. result.push_back(unif(rng));
  36. }
  37. samples["Sample" + sampleNum] = result;
  38. }
  39. std::cout << samples << std::endl;
  40. return EXIT_SUCCESS;
  41. }