forked from boostorg/algorithm
Merge pull request #39 from ZaMaZaN4iK/feature_branch/apply_permutation
Apply_permutation
This commit is contained in:
@ -83,6 +83,9 @@ alias unit_test_framework
|
||||
|
||||
# Is_partitioned_until tests
|
||||
[ run is_partitioned_until_test.cpp unit_test_framework : : : : is_partitioned_until_test ]
|
||||
|
||||
# Apply_permutation tests
|
||||
[ run apply_permutation_test.cpp unit_test_framework : : : : apply_permutation_test ]
|
||||
;
|
||||
}
|
||||
|
||||
|
169
test/apply_permutation_test.cpp
Normal file
169
test/apply_permutation_test.cpp
Normal file
@ -0,0 +1,169 @@
|
||||
/*
|
||||
Copyright (c) Alexander Zaitsev <zamazan4ik@gmail.com>, 2017
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See
|
||||
accompanying file LICENSE_1_0.txt or copy at
|
||||
http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
See http://www.boost.org/ for latest version.
|
||||
*/
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include <boost/algorithm/apply_permutation.hpp>
|
||||
|
||||
#define BOOST_TEST_DYN_LINK
|
||||
#define BOOST_TEST_MAIN
|
||||
|
||||
#include <boost/test/unit_test.hpp>
|
||||
|
||||
namespace ba = boost::algorithm;
|
||||
|
||||
|
||||
void test_apply_permutation()
|
||||
{
|
||||
//Empty
|
||||
{
|
||||
std::vector<int> vec, order, result;
|
||||
|
||||
ba::apply_permutation(vec.begin(), vec.end(), order.begin(), order.end());
|
||||
BOOST_CHECK(vec == result);
|
||||
}
|
||||
//1 element
|
||||
{
|
||||
std::vector<int> vec, order, result;
|
||||
vec.push_back(1);
|
||||
order.push_back(0);
|
||||
result = vec;
|
||||
|
||||
ba::apply_permutation(vec.begin(), vec.end(), order.begin(), order.end());
|
||||
BOOST_CHECK(vec == result);
|
||||
}
|
||||
//2 elements, no changes
|
||||
{
|
||||
std::vector<int> vec, order, result;
|
||||
vec.push_back(1); vec.push_back(2);
|
||||
order.push_back(0); order.push_back(1);
|
||||
result = vec;
|
||||
|
||||
ba::apply_permutation(vec.begin(), vec.end(), order.begin(), order.end());
|
||||
BOOST_CHECK(vec == result);
|
||||
}
|
||||
//2 elements, changed
|
||||
{
|
||||
std::vector<int> vec, order, result;
|
||||
vec.push_back(1); vec.push_back(2);
|
||||
order.push_back(1); order.push_back(0);
|
||||
result.push_back(2); result.push_back(1);
|
||||
|
||||
ba::apply_permutation(vec.begin(), vec.end(), order.begin(), order.end());
|
||||
BOOST_CHECK(vec == result);
|
||||
}
|
||||
//Multiple elements, no changes
|
||||
{
|
||||
std::vector<int> vec, order, result;
|
||||
vec.push_back(1); vec.push_back(2); vec.push_back(3); vec.push_back(4); vec.push_back(5);
|
||||
order.push_back(0); order.push_back(1); order.push_back(2); order.push_back(3); order.push_back(4);
|
||||
result = vec;
|
||||
|
||||
ba::apply_permutation(vec.begin(), vec.end(), order.begin(), order.end());
|
||||
BOOST_CHECK(vec == result);
|
||||
}
|
||||
//Multiple elements, changed
|
||||
{
|
||||
std::vector<int> vec, order, result;
|
||||
vec.push_back(1); vec.push_back(2); vec.push_back(3); vec.push_back(4); vec.push_back(5);
|
||||
order.push_back(4); order.push_back(3); order.push_back(2); order.push_back(1); order.push_back(0);
|
||||
result.push_back(5); result.push_back(4); result.push_back(3); result.push_back(2); result.push_back(1);
|
||||
|
||||
ba::apply_permutation(vec.begin(), vec.end(), order.begin(), order.end());
|
||||
BOOST_CHECK(vec == result);
|
||||
}
|
||||
//Just test range interface
|
||||
{
|
||||
std::vector<int> vec, order, result;
|
||||
vec.push_back(1); vec.push_back(2); vec.push_back(3); vec.push_back(4); vec.push_back(5);
|
||||
order.push_back(0); order.push_back(1); order.push_back(2); order.push_back(3); order.push_back(4);
|
||||
result = vec;
|
||||
|
||||
ba::apply_permutation(vec, order);
|
||||
BOOST_CHECK(vec == result);
|
||||
}
|
||||
}
|
||||
|
||||
void test_apply_reverse_permutation()
|
||||
{
|
||||
//Empty
|
||||
{
|
||||
std::vector<int> vec, order, result;
|
||||
|
||||
ba::apply_reverse_permutation(vec.begin(), vec.end(), order.begin(), order.end());
|
||||
BOOST_CHECK(vec == result);
|
||||
}
|
||||
//1 element
|
||||
{
|
||||
std::vector<int> vec, order, result;
|
||||
vec.push_back(1);
|
||||
order.push_back(0);
|
||||
result = vec;
|
||||
|
||||
ba::apply_reverse_permutation(vec.begin(), vec.end(), order.begin(), order.end());
|
||||
BOOST_CHECK(vec == result);
|
||||
}
|
||||
//2 elements, no changes
|
||||
{
|
||||
std::vector<int> vec, order, result;
|
||||
vec.push_back(1); vec.push_back(2);
|
||||
order.push_back(0); order.push_back(1);
|
||||
result = vec;
|
||||
|
||||
ba::apply_reverse_permutation(vec.begin(), vec.end(), order.begin(), order.end());
|
||||
BOOST_CHECK(vec == result);
|
||||
}
|
||||
//2 elements, changed
|
||||
{
|
||||
std::vector<int> vec, order, result;
|
||||
vec.push_back(1); vec.push_back(2);
|
||||
order.push_back(1); order.push_back(0);
|
||||
result.push_back(2); result.push_back(1);
|
||||
|
||||
ba::apply_reverse_permutation(vec.begin(), vec.end(), order.begin(), order.end());
|
||||
BOOST_CHECK(vec == result);
|
||||
}
|
||||
//Multiple elements, no changes
|
||||
{
|
||||
std::vector<int> vec, order, result;
|
||||
vec.push_back(1); vec.push_back(2); vec.push_back(3); vec.push_back(4); vec.push_back(5);
|
||||
order.push_back(0); order.push_back(1); order.push_back(2); order.push_back(3); order.push_back(4);
|
||||
result = vec;
|
||||
|
||||
ba::apply_reverse_permutation(vec.begin(), vec.end(), order.begin(), order.end());
|
||||
BOOST_CHECK(vec == result);
|
||||
}
|
||||
//Multiple elements, changed
|
||||
{
|
||||
std::vector<int> vec, order, result;
|
||||
vec.push_back(1); vec.push_back(2); vec.push_back(3); vec.push_back(4); vec.push_back(5);
|
||||
order.push_back(4); order.push_back(3); order.push_back(2); order.push_back(1); order.push_back(0);
|
||||
result.push_back(5); result.push_back(4); result.push_back(3); result.push_back(2); result.push_back(1);
|
||||
|
||||
ba::apply_reverse_permutation(vec.begin(), vec.end(), order.begin(), order.end());
|
||||
BOOST_CHECK(vec == result);
|
||||
}
|
||||
//Just test range interface
|
||||
{
|
||||
std::vector<int> vec, order, result;
|
||||
vec.push_back(1); vec.push_back(2); vec.push_back(3); vec.push_back(4); vec.push_back(5);
|
||||
order.push_back(0); order.push_back(1); order.push_back(2); order.push_back(3); order.push_back(4);
|
||||
result = vec;
|
||||
|
||||
ba::apply_reverse_permutation(vec, order);
|
||||
BOOST_CHECK(vec == result);
|
||||
}
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(test_main)
|
||||
{
|
||||
test_apply_permutation();
|
||||
test_apply_reverse_permutation();
|
||||
}
|
Reference in New Issue
Block a user