NEURON
permutations.cpp
Go to the documentation of this file.
2 
3 #include <catch2/catch_test_macros.hpp>
4 
5 #include <vector>
6 
7 TEST_CASE("Permutation algorithms", "[Neuron][node_order_optim][permute]") {
8  GIVEN("A vector of elements and a permutation vector") {
9  const std::vector<int> values{49, 32, 17, 29};
10  const std::vector<int> forward_permutation{3, 2, 0, 1};
11  const std::vector<int> inverse_permutation{2, 3, 1, 0};
12  THEN("forward_permute is done correctly") {
13  std::vector<int> forward_permutted_values{29, 17, 49, 32};
14  auto values_copy{values};
15  forward_permute(values_copy, forward_permutation);
16  REQUIRE(values_copy == forward_permutted_values);
17  }
18  THEN("Inversion of the permute vector is done correctly") {
19  REQUIRE(inverse_permute_vector(forward_permutation) == inverse_permutation);
20  /// Make sure that pinv[p[i]] = i = p[pinv[i]]
21  const std::vector<int> index{0, 1, 2, 3};
22  auto permutation_copy{forward_permutation};
23  forward_permute(permutation_copy, inverse_permutation);
24  REQUIRE(permutation_copy == index);
25  auto inverse_permutation_copy{inverse_permutation};
26  forward_permute(inverse_permutation_copy, forward_permutation);
27  REQUIRE(inverse_permutation_copy == index);
28  }
29  }
30 }
short index
Definition: cabvars.h:11
TEST_CASE("Permutation algorithms", "[Neuron][node_order_optim][permute]")
Definition: permutations.cpp:7
std::vector< T > inverse_permute_vector(const std::vector< T > &p)
void forward_permute(std::vector< T > &data, const std::vector< int > &perm)