#include #include "gtest/gtest.h" #include "radixalgorithm/ordering.hh" #include "radixbug/bug.hh" TEST(radixalgorithm, Ordering) { std::vector list{2.0, 1.0, 3.0, 4.0, 5.0, 0.0, 10.0}; // permutation 5, 1, 0, 2, 3, 4, 6 // correct ordering std::vector list2{0, 1, 2, 3, 4, 5, 6}; auto comparator = [](double a, double b) { radix_line("\t[" << a << "," << b << "]"); return a < b; }; std::vector permutation = radix::sort_permutation(list, comparator); // test edges EXPECT_EQ(permutation[0], 5); EXPECT_EQ(permutation[6], 6); std::cout << "Ordering:" << std::endl; for (size_t i = 0; i < permutation.size(); ++i) { std::cout << "index " << i << ". (" << list[i] << ") recieves value from " << permutation[i] << " (" << list[permutation[i]] << ")" << std::endl; } // // sort list given the radix::apply_permutation(list, permutation); EXPECT_DOUBLE_EQ(list[0], 0.0); EXPECT_DOUBLE_EQ(list[6], 10.0); radix::apply_permutation(list2, permutation); EXPECT_EQ(list2[0], 5); EXPECT_EQ(list2[6], 6); for (size_t i = 0; i < list.size(); ++i) { std::cout << "[" << list[i] << "," << list2[i] << "]" << std::endl; } }