mirror of
https://github.com/boostorg/container.git
synced 2026-08-04 03:34:11 +02:00
Add dual segmentation tests
This commit is contained in:
@@ -218,6 +218,68 @@ void test_swap_ranges_movable_seg2()
|
||||
BOOST_TEST_EQ(other[static_cast<std::size_t>(i)].value(), i + 1);
|
||||
}
|
||||
|
||||
void test_swap_ranges_segmented_second()
|
||||
{
|
||||
test_detail::seg_vector<int> sv;
|
||||
int a1[] = {1, 2, 3};
|
||||
int a2[] = {4, 5};
|
||||
int a3[] = {6, 7, 8, 9};
|
||||
sv.add_segment_range(a1, a1 + 3);
|
||||
sv.add_segment_range(a2, a2 + 2);
|
||||
sv.add_segment_range(a3, a3 + 4);
|
||||
|
||||
test_detail::seg_vector<int> other;
|
||||
int b1[] = {10, 20, 30, 40};
|
||||
int b2[] = {50, 60, 70};
|
||||
int b3[] = {80, 90};
|
||||
other.add_segment_range(b1, b1 + 4);
|
||||
other.add_segment_range(b2, b2 + 3);
|
||||
other.add_segment_range(b3, b3 + 2);
|
||||
|
||||
typedef test_detail::seg_vector<int>::iterator iter_t;
|
||||
iter_t result = segmented_swap_ranges(sv.begin(), sv.end(), other.begin());
|
||||
|
||||
BOOST_TEST(result == other.end());
|
||||
|
||||
iter_t it = sv.begin();
|
||||
for(int i = 0; i < 9; ++i, ++it)
|
||||
BOOST_TEST_EQ(*it, (i + 1) * 10);
|
||||
|
||||
it = other.begin();
|
||||
for(int i = 0; i < 9; ++i, ++it)
|
||||
BOOST_TEST_EQ(*it, i + 1);
|
||||
}
|
||||
|
||||
void test_swap_ranges_seg2_to_seg2()
|
||||
{
|
||||
test_detail::seg2_vector<int> sv2;
|
||||
int a1[] = {1, 2, 3};
|
||||
int a2[] = {4, 5};
|
||||
int a3[] = {6, 7, 8, 9};
|
||||
sv2.add_flat_segment_range(a1, a1 + 3);
|
||||
sv2.add_flat_segment_range(a2, a2 + 2);
|
||||
sv2.add_flat_segment_range(a3, a3 + 4);
|
||||
|
||||
test_detail::seg2_vector<int> other;
|
||||
int b1[] = {10, 20, 30, 40, 50};
|
||||
int b2[] = {60, 70, 80, 90};
|
||||
other.add_flat_segment_range(b1, b1 + 5);
|
||||
other.add_flat_segment_range(b2, b2 + 4);
|
||||
|
||||
typedef test_detail::seg2_vector<int>::iterator iter_t;
|
||||
iter_t result = segmented_swap_ranges(sv2.begin(), sv2.end(), other.begin());
|
||||
|
||||
BOOST_TEST(result == other.end());
|
||||
|
||||
iter_t it = sv2.begin();
|
||||
for(int i = 0; i < 9; ++i, ++it)
|
||||
BOOST_TEST_EQ(*it, (i + 1) * 10);
|
||||
|
||||
it = other.begin();
|
||||
for(int i = 0; i < 9; ++i, ++it)
|
||||
BOOST_TEST_EQ(*it, i + 1);
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test_swap_ranges_full();
|
||||
@@ -229,5 +291,7 @@ int main()
|
||||
test_swap_ranges_seg2();
|
||||
test_swap_ranges_movable_seg();
|
||||
test_swap_ranges_movable_seg2();
|
||||
test_swap_ranges_segmented_second();
|
||||
test_swap_ranges_seg2_to_seg2();
|
||||
return boost::report_errors();
|
||||
}
|
||||
|
||||
@@ -144,6 +144,79 @@ void test_transform_seg2()
|
||||
BOOST_TEST_EQ(out[8], 18);
|
||||
}
|
||||
|
||||
void test_transform_segmented_output()
|
||||
{
|
||||
test_detail::seg_vector<int> sv;
|
||||
int a1[] = {1, 2, 3};
|
||||
int a2[] = {4, 5};
|
||||
int a3[] = {6, 7, 8, 9};
|
||||
sv.add_segment_range(a1, a1 + 3);
|
||||
sv.add_segment_range(a2, a2 + 2);
|
||||
sv.add_segment_range(a3, a3 + 4);
|
||||
|
||||
test_detail::seg_vector<int> out;
|
||||
out.add_segment(4, 0);
|
||||
out.add_segment(3, 0);
|
||||
out.add_segment(2, 0);
|
||||
|
||||
typedef test_detail::seg_vector<int>::iterator iter_t;
|
||||
iter_t result = segmented_transform(sv.begin(), sv.end(), out.begin(), times_two());
|
||||
|
||||
BOOST_TEST(result == out.end());
|
||||
iter_t it = out.begin();
|
||||
for(int i = 0; i < 9; ++i, ++it)
|
||||
BOOST_TEST_EQ(*it, (i + 1) * 2);
|
||||
}
|
||||
|
||||
void test_transform_seg2_to_seg2()
|
||||
{
|
||||
test_detail::seg2_vector<int> sv2;
|
||||
int a1[] = {1, 2, 3};
|
||||
int a2[] = {4, 5};
|
||||
int a3[] = {6, 7, 8, 9};
|
||||
sv2.add_flat_segment_range(a1, a1 + 3);
|
||||
sv2.add_flat_segment_range(a2, a2 + 2);
|
||||
sv2.add_flat_segment_range(a3, a3 + 4);
|
||||
|
||||
test_detail::seg2_vector<int> out;
|
||||
{
|
||||
test_detail::seg_vector<int> s1; s1.add_segment(5, 0);
|
||||
test_detail::seg_vector<int> s2; s2.add_segment(4, 0);
|
||||
out.add_segment(s1);
|
||||
out.add_segment(s2);
|
||||
}
|
||||
|
||||
typedef test_detail::seg2_vector<int>::iterator iter_t;
|
||||
iter_t result = segmented_transform(sv2.begin(), sv2.end(), out.begin(), times_two());
|
||||
|
||||
BOOST_TEST(result == out.end());
|
||||
iter_t it = out.begin();
|
||||
for(int i = 0; i < 9; ++i, ++it)
|
||||
BOOST_TEST_EQ(*it, (i + 1) * 2);
|
||||
}
|
||||
|
||||
void test_transform_seg_to_seg_misaligned()
|
||||
{
|
||||
test_detail::seg_vector<int> sv;
|
||||
int a1[] = {1, 2, 3, 4, 5};
|
||||
int a2[] = {6, 7, 8};
|
||||
sv.add_segment_range(a1, a1 + 5);
|
||||
sv.add_segment_range(a2, a2 + 3);
|
||||
|
||||
test_detail::seg_vector<int> out;
|
||||
out.add_segment(2, 0);
|
||||
out.add_segment(3, 0);
|
||||
out.add_segment(3, 0);
|
||||
|
||||
typedef test_detail::seg_vector<int>::iterator iter_t;
|
||||
iter_t result = segmented_transform(sv.begin(), sv.end(), out.begin(), negate_val());
|
||||
|
||||
BOOST_TEST(result == out.end());
|
||||
iter_t it = out.begin();
|
||||
for(int i = 0; i < 8; ++i, ++it)
|
||||
BOOST_TEST_EQ(*it, -(i + 1));
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test_transform_full_range();
|
||||
@@ -153,5 +226,8 @@ int main()
|
||||
test_transform_sentinel_segmented();
|
||||
test_transform_sentinel_non_segmented();
|
||||
test_transform_seg2();
|
||||
test_transform_segmented_output();
|
||||
test_transform_seg2_to_seg2();
|
||||
test_transform_seg_to_seg_misaligned();
|
||||
return boost::report_errors();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user