From ce23a6ccf2cc276b230c4c35046413c1fc5560df Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Wed, 3 Jun 2026 12:08:45 +0200 Subject: [PATCH] FFTIndexerTest: Update test to sort input vectors + remove old, unused file duplicating this test --- tests/FFTIndexerTest.cpp | 54 -------------------------------------- tests/IndexingUnitTest.cpp | 22 +++++++++++++--- 2 files changed, 19 insertions(+), 57 deletions(-) delete mode 100644 tests/FFTIndexerTest.cpp diff --git a/tests/FFTIndexerTest.cpp b/tests/FFTIndexerTest.cpp deleted file mode 100644 index b4cd67e8..00000000 --- a/tests/FFTIndexerTest.cpp +++ /dev/null @@ -1,54 +0,0 @@ -// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute -// SPDX-License-Identifier: GPL-3.0-only - -#include -#include "../image_analysis/indexing/IndexerFactory.h" -#include "../common/Logger.h" - -TEST_CASE("FFTIndexer") { - Logger logger("FFTIndexer"); - - UnitCell uc(39,45,78,90,90,90); - CrystalLattice cl(uc); - - DiffractionExperiment experiment; - IndexingSettings settings; - settings.Algorithm(IndexingAlgorithmEnum::FFT) - .FFT_MaxUnitCell_A(250.0).FFT_HighResolution_A(2 * M_PI / 3.0); - experiment.ImportIndexingSettings(settings).SetUnitCell(uc); - -#ifndef JFJOCH_USE_CUDA - REQUIRE(experiment.GetIndexingAlgorithm() == IndexingAlgorithmEnum::None); -#else - REQUIRE(experiment.GetIndexingAlgorithm() == IndexingAlgorithmEnum::FFT); - REQUIRE(experiment.GetIndexingSettings().GetTolerance() == Catch::Approx(0.1f)); - std::unique_ptr indexer = CreateIndexer(experiment); - REQUIRE(indexer); - - std::vector vec; - for (int h = -2; h < 10; h++) { - for (int k = -5; k < 10; k++) { - for (int l = -3; l < 10; l++) { - vec.push_back(h * cl.Astar() + k * cl.Bstar() + l * cl.Cstar()); - } - } - } - logger.Info("Spots {}", vec.size()); - - auto start = std::chrono::high_resolution_clock::now(); - auto result = indexer->Run(vec); - auto end = std::chrono::high_resolution_clock::now(); - - REQUIRE(result.lattice.size() == 1); - auto uc_out = result.lattice[0].GetUnitCell(); - CHECK(uc_out.a == Catch::Approx(uc.a));; - CHECK(uc_out.b == Catch::Approx(uc.b));; - CHECK(uc_out.c == Catch::Approx(uc.c));; - - CHECK(uc_out.alpha == Catch::Approx(uc.alpha));; - CHECK(uc_out.beta == Catch::Approx(uc.beta));; - CHECK(uc_out.gamma == Catch::Approx(uc.gamma));; - - logger.Info("Time: {} ms", std::chrono::duration_cast(end - start).count()); -#endif -} diff --git a/tests/IndexingUnitTest.cpp b/tests/IndexingUnitTest.cpp index d97b3ce9..390daf9b 100644 --- a/tests/IndexingUnitTest.cpp +++ b/tests/IndexingUnitTest.cpp @@ -218,10 +218,26 @@ TEST_CASE("FFTIndexer","[Indexing]") { auto end = std::chrono::high_resolution_clock::now(); REQUIRE(result.lattice.size() == 1); + auto uc_out = result.lattice[0].GetUnitCell(); - CHECK(uc_out.a == Catch::Approx(uc.b)); - CHECK(uc_out.b == Catch::Approx(uc.a)); - CHECK(uc_out.c == Catch::Approx(uc.c)); + + // Collect and sort both sets of lengths to compare order-independently + std::array out_lengths = { + static_cast(uc_out.a), + static_cast(uc_out.b), + static_cast(uc_out.c) + }; + std::array ref_lengths = { + static_cast(uc.a), + static_cast(uc.b), + static_cast(uc.c) + }; + std::sort(out_lengths.begin(), out_lengths.end()); + std::sort(ref_lengths.begin(), ref_lengths.end()); + + CHECK(out_lengths[0] == Catch::Approx(ref_lengths[0])); + CHECK(out_lengths[1] == Catch::Approx(ref_lengths[1])); + CHECK(out_lengths[2] == Catch::Approx(ref_lengths[2])); CHECK(uc_out.alpha == Catch::Approx(uc.alpha)); CHECK(uc_out.beta == Catch::Approx(uc.beta));