int main(int argc, char **argv)
{
  setlocale(LC_ALL, "");

  g_test_init(&argc, &argv, NULL);

  GSList *slist = NULL;

  std::vector<bool> reverse;
  reverse.push_back(false);
  reverse.push_back(true);

  for(std::vector<bool>::iterator it_reverse = reverse.begin(); it_reverse != reverse.end(); ++it_reverse)
  {
    std::vector<float> scale;
    scale.push_back(0.75f);
    scale.push_back(1.25f);

    for(std::vector<float>::iterator it_scale = scale.begin(); it_scale != scale.end(); ++it_scale)
    {
      std::vector<size_t> align;
      align.push_back(0);
      align.push_back(4  * sizeof(float)); // SSE
      //align.push_back(8  * sizeof(float)); // AVX
      //align.push_back(16 * sizeof(float)); // AVX512

      for(std::vector<size_t>::iterator it_align = align.begin(); it_align != align.end(); ++it_align)
      {
        lfTestParams *p = (lfTestParams *)g_malloc(sizeof(lfTestParams));

        p->reverse   = *it_reverse;
        p->scale     = *it_scale;
        p->alignment = *it_align;

        add_set_item(p);

        slist = g_slist_append(slist, p);
      }
    }
  }

  const int res = g_test_run();

  g_slist_free_full(slist, (GDestroyNotify)g_free);

  return res;
}
int main(int argc, char **argv)
{
  setlocale(LC_ALL, "");

  g_test_init(&argc, &argv, NULL);

  GSList *slist = NULL;

  std::vector<bool> reverse;
  reverse.push_back(false);
  reverse.push_back(true);

  for(std::vector<bool>::iterator it_reverse = reverse.begin(); it_reverse != reverse.end(); ++it_reverse)
  {
    std::map<std::string, lfLensType> lensType;
    lensType["LF_RECTILINEAR"]           = LF_RECTILINEAR;
    lensType["LF_FISHEYE"]               = LF_FISHEYE;
    lensType["LF_PANORAMIC"]             = LF_PANORAMIC;
    lensType["LF_EQUIRECTANGULAR"]       = LF_EQUIRECTANGULAR;
    lensType["LF_FISHEYE_ORTHOGRAPHIC"]  = LF_FISHEYE_ORTHOGRAPHIC;
    lensType["LF_FISHEYE_STEREOGRAPHIC"] = LF_FISHEYE_STEREOGRAPHIC;
    lensType["LF_FISHEYE_EQUISOLID"]     = LF_FISHEYE_EQUISOLID;
    lensType["LF_FISHEYE_THOBY"]         = LF_FISHEYE_THOBY;

    for(std::map<std::string, lfLensType>::iterator it_sourceType = lensType.begin(); it_sourceType != lensType.end(); ++it_sourceType)
    {
      for(std::map<std::string, lfLensType>::iterator it_targetType = lensType.begin(); it_targetType != lensType.end(); ++it_targetType)
      {
        if(it_sourceType->second == it_targetType->second)
          continue;

        std::vector<size_t> align;
        align.push_back(0);
        align.push_back(4  * sizeof(float)); // SSE
        //align.push_back(8  * sizeof(float)); // AVX
        //align.push_back(16 * sizeof(float)); // AVX512

        for(std::vector<size_t>::iterator it_align = align.begin(); it_align != align.end(); ++it_align)
        {
          lfTestParams *p = (lfTestParams *)g_malloc(sizeof(lfTestParams));

          p->reverse        = *it_reverse;
          p->sourceType     = g_strdup(it_sourceType->first.c_str());
          p->sourceLensType = it_sourceType->second;
          p->targetType     = g_strdup(it_targetType->first.c_str());
          p->targetLensType = it_targetType->second;
          p->alignment      = *it_align;

          add_set_item(p);

          slist = g_slist_append(slist, p);
        }
      }
    }
  }

  const int res = g_test_run();

  g_slist_free_full(slist, (GDestroyNotify)free_params);

  return res;
}
int main(int argc, char **argv)
{
  setlocale(LC_ALL, "");

  g_test_init(&argc, &argv, NULL);

  GSList *slist = NULL;

  std::vector<bool> reverse;
  reverse.push_back(false);
  reverse.push_back(true);

  for(std::vector<bool>::iterator it_reverse = reverse.begin(); it_reverse != reverse.end(); ++it_reverse)
  {

    lfLensCalibAttributes cs = {0.0, 0.0, 1.0, 1.5};

    std::map<std::string, lfLensCalibDistortion> distortCalib;
    // ??? + Canon EF 85mm f/1.2L II USM
    distortCalib["LF_DIST_MODEL_POLY3"] = (lfLensCalibDistortion)
    {
      LF_DIST_MODEL_POLY3, 85.0f, 85.3502f, false, { -0.00412}, cs
    };
    //Canon PowerShot G12 (fixed lens)
    distortCalib["LF_DIST_MODEL_POLY5"] = (lfLensCalibDistortion)
    {
      LF_DIST_MODEL_POLY5, 6.1f, 6.1f, false, { -0.030571633, 0.004658548}, cs
    };
    //Canon EOS 5D Mark III + Canon EF 24-70mm f/2.8L II USM
    distortCalib["LF_DIST_MODEL_PTLENS"] = (lfLensCalibDistortion)
    {
      LF_DIST_MODEL_PTLENS, 24.0f, 24.46704f, false, {0.02964, -0.07853, 0.02943}, cs
    };

    for(std::map<std::string, lfLensCalibDistortion>::iterator it_distortCalib = distortCalib.begin(); it_distortCalib != distortCalib.end(); ++it_distortCalib)
    {
      std::vector<size_t> align;
      align.push_back(0);
      align.push_back(4  * sizeof(float)); // SSE
      //align.push_back(8  * sizeof(float)); // AVX
      //align.push_back(16 * sizeof(float)); // AVX512

      for(std::vector<size_t>::iterator it_align = align.begin(); it_align != align.end(); ++it_align)
      {
        lfTestParams *p = (lfTestParams *)g_malloc(sizeof(lfTestParams));

        p->reverse         = *it_reverse;
        p->distortionModel = g_strdup(it_distortCalib->first.c_str());
        p->calib           = it_distortCalib->second;
        p->alignment       = *it_align;

        add_set_item(p);

        slist = g_slist_append(slist, p);
      }
    }
  }

  const int res = g_test_run();

  g_slist_free_full(slist, (GDestroyNotify)free_params);

  return res;
}