1d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko/* 2d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko * Copyright (C) 2016 The Android Open Source Project 3d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko * 4d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko * Licensed under the Apache License, Version 2.0 (the "License"); 5d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko * you may not use this file except in compliance with the License. 6d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko * You may obtain a copy of the License at 7d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko * 8d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko * http://www.apache.org/licenses/LICENSE-2.0 9d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko * 10d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko * Unless required by applicable law or agreed to in writing, software 11d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko * distributed under the License is distributed on an "AS IS" BASIS, 12d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko * See the License for the specific language governing permissions and 14d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko * limitations under the License. 15d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko */ 16d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 17d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko#include <algorithm> 18d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko#include <forward_list> 19d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko#include <vector> 20d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 21d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko#include "gtest/gtest.h" 22d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko#include "intrusive_forward_list.h" 23d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 24d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Markonamespace art { 25d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 26d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Markostruct IFLTestValue { 27d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko // Deliberately not explicit. 28d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko IFLTestValue(int v) : hook(), value(v) { } // NOLINT(runtime/explicit) 29d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 30d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko IntrusiveForwardListHook hook; 31d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko int value; 32d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko}; 33d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 34d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Markobool operator==(const IFLTestValue& lhs, const IFLTestValue& rhs) { 35d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko return lhs.value == rhs.value; 36d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko} 37d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 38d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Markobool operator<(const IFLTestValue& lhs, const IFLTestValue& rhs) { 39d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko return lhs.value < rhs.value; 40d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko} 41d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 42d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko#define ASSERT_LISTS_EQUAL(expected, value) \ 43d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko do { \ 44d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_EQ(expected.empty(), value.empty()); \ 45d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_EQ(std::distance(expected.begin(), expected.end()), \ 46d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::distance(value.begin(), value.end())); \ 47d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_TRUE(std::equal(expected.begin(), expected.end(), value.begin())); \ 48d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko } while (false) 49d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 50d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir MarkoTEST(IntrusiveForwardList, IteratorToConstIterator) { 51d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko IntrusiveForwardList<IFLTestValue> ifl; 52d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko IntrusiveForwardList<IFLTestValue>::iterator begin = ifl.begin(); 53d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko IntrusiveForwardList<IFLTestValue>::const_iterator cbegin = ifl.cbegin(); 54d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko IntrusiveForwardList<IFLTestValue>::const_iterator converted_begin = begin; 55d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_TRUE(converted_begin == cbegin); 56d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko} 57d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 58d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir MarkoTEST(IntrusiveForwardList, IteratorOperators) { 59d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko IntrusiveForwardList<IFLTestValue> ifl; 60d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_TRUE(ifl.begin() == ifl.cbegin()); 61d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_FALSE(ifl.begin() != ifl.cbegin()); 62d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_TRUE(ifl.end() == ifl.cend()); 63d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_FALSE(ifl.end() != ifl.cend()); 64d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 65d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_TRUE(ifl.begin() == ifl.end()); // Empty. 66d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_FALSE(ifl.begin() != ifl.end()); // Empty. 67d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 68d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko IFLTestValue value(1); 69d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl.insert_after(ifl.cbefore_begin(), value); 70d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 71d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_FALSE(ifl.begin() == ifl.end()); // Not empty. 72d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_TRUE(ifl.begin() != ifl.end()); // Not empty. 73d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko} 74d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 75d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir MarkoTEST(IntrusiveForwardList, ConstructRange) { 76d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::forward_list<int> ref({ 1, 2, 7 }); 77d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::vector<IFLTestValue> storage(ref.begin(), ref.end()); 78d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko IntrusiveForwardList<IFLTestValue> ifl(storage.begin(), storage.end()); 79d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 80d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko} 81d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 82d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir MarkoTEST(IntrusiveForwardList, Assign) { 83d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::forward_list<int> ref1({ 2, 8, 5 }); 84d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::vector<IFLTestValue> storage1(ref1.begin(), ref1.end()); 85d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko IntrusiveForwardList<IFLTestValue> ifl; 86d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl.assign(storage1.begin(), storage1.end()); 87d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref1, ifl); 88d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::forward_list<int> ref2({ 7, 1, 3 }); 89d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::vector<IFLTestValue> storage2(ref2.begin(), ref2.end()); 90d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl.assign(storage2.begin(), storage2.end()); 91d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref2, ifl); 92d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko} 93d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 94d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir MarkoTEST(IntrusiveForwardList, PushPop) { 95d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko IFLTestValue value3(3); 96d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko IFLTestValue value7(7); 97d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::forward_list<int> ref; 98d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko IntrusiveForwardList<IFLTestValue> ifl; 99d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 100d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref.push_front(3); 101d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl.push_front(value3); 102d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 103d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_EQ(3, ifl.front()); 104d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref.push_front(7); 105d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl.push_front(value7); 106d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 107d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_EQ(7, ifl.front()); 108d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref.pop_front(); 109d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl.pop_front(); 110d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 111d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_EQ(3, ifl.front()); 112d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref.pop_front(); 113d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl.pop_front(); 114d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 115d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko} 116d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 117d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir MarkoTEST(IntrusiveForwardList, InsertAfter1) { 118d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko IFLTestValue value4(4); 119d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko IFLTestValue value8(8); 120d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko IFLTestValue value5(5); 121d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko IFLTestValue value3(3); 122d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::forward_list<int> ref; 123d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko IntrusiveForwardList<IFLTestValue> ifl; 124d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 125d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko auto ref_it = ref.insert_after(ref.before_begin(), 4); 126d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko auto ifl_it = ifl.insert_after(ifl.before_begin(), value4); 127d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 128d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_EQ(*ref_it, *ifl_it); 129d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko CHECK(ref_it == ref.begin()); 130d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_TRUE(ifl_it == ifl.begin()); 131d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 132d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref_it = ref.insert_after(ref.begin(), 8); 133d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl_it = ifl.insert_after(ifl.begin(), value8); 134d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 135d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_EQ(*ref_it, *ifl_it); 136d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko CHECK(ref_it != ref.end()); 137d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_TRUE(ifl_it != ifl.end()); 138d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko CHECK(++ref_it == ref.end()); 139d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_TRUE(++ifl_it == ifl.end()); 140d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 141d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref_it = ref.insert_after(ref.begin(), 5); 142d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl_it = ifl.insert_after(ifl.begin(), value5); 143d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 144d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_EQ(*ref_it, *ifl_it); 145d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 146d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref_it = ref.insert_after(ref_it, 3); 147d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl_it = ifl.insert_after(ifl_it, value3); 148d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 149d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_EQ(*ref_it, *ifl_it); 150d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko} 151d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 152d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir MarkoTEST(IntrusiveForwardList, InsertAfter2) { 153d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::forward_list<int> ref; 154d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko IntrusiveForwardList<IFLTestValue> ifl; 155d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 156d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko auto ref_it = ref.insert_after(ref.before_begin(), { 2, 8, 5 }); 157d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::vector<IFLTestValue> storage1({ { 2 }, { 8 }, { 5 } }); 158d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko auto ifl_it = ifl.insert_after(ifl.before_begin(), storage1.begin(), storage1.end()); 159d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 160d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_EQ(*ref_it, *ifl_it); 161d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 162d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::vector<IFLTestValue> storage2({ { 7 }, { 2 } }); 163d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref_it = ref.insert_after(ref.begin(), { 7, 2 }); 164d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl_it = ifl.insert_after(ifl.begin(), storage2.begin(), storage2.end()); 165d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 166d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_EQ(*ref_it, *ifl_it); 167d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 168d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::vector<IFLTestValue> storage3({ { 1 }, { 3 }, { 4 }, { 9 } }); 169d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref_it = ref.begin(); 170d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl_it = ifl.begin(); 171d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::advance(ref_it, std::distance(ref.begin(), ref.end()) - 1); 172d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::advance(ifl_it, std::distance(ifl.begin(), ifl.end()) - 1); 173d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref_it = ref.insert_after(ref_it, { 1, 3, 4, 9 }); 174d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl_it = ifl.insert_after(ifl_it, storage3.begin(), storage3.end()); 175d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 176d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko} 177d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 178d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir MarkoTEST(IntrusiveForwardList, EraseAfter1) { 179d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::forward_list<int> ref({ 1, 2, 7, 4, 5 }); 180d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::vector<IFLTestValue> storage(ref.begin(), ref.end()); 181d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko IntrusiveForwardList<IFLTestValue> ifl(storage.begin(), storage.end()); 182d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 183d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko CHECK_EQ(std::distance(ref.begin(), ref.end()), 5); 184d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 185d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko auto ref_it = ref.begin(); 186d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko auto ifl_it = ifl.begin(); 187d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::advance(ref_it, 2); 188d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::advance(ifl_it, 2); 189d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref_it = ref.erase_after(ref_it); 190d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl_it = ifl.erase_after(ifl_it); 191d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 192d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko CHECK_EQ(std::distance(ref.begin(), ref.end()), 4); 193d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko CHECK(ref_it != ref.end()); 194d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_TRUE(ifl_it != ifl.end()); 195d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko CHECK(++ref_it == ref.end()); 196d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_TRUE(++ifl_it == ifl.end()); 197d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 198d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref_it = ref.begin(); 199d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl_it = ifl.begin(); 200d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::advance(ref_it, 2); 201d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::advance(ifl_it, 2); 202d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref_it = ref.erase_after(ref_it); 203d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl_it = ifl.erase_after(ifl_it); 204d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 205d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko CHECK_EQ(std::distance(ref.begin(), ref.end()), 3); 206d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko CHECK(ref_it == ref.end()); 207d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_TRUE(ifl_it == ifl.end()); 208d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 209d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref_it = ref.erase_after(ref.begin()); 210d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl_it = ifl.erase_after(ifl.begin()); 211d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 212d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko CHECK_EQ(std::distance(ref.begin(), ref.end()), 2); 213d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko CHECK(ref_it != ref.end()); 214d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_TRUE(ifl_it != ifl.end()); 215d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko CHECK(++ref_it == ref.end()); 216d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_TRUE(++ifl_it == ifl.end()); 217d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 218d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref_it = ref.erase_after(ref.before_begin()); 219d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl_it = ifl.erase_after(ifl.before_begin()); 220d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 221d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko CHECK_EQ(std::distance(ref.begin(), ref.end()), 1); 222d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko CHECK(ref_it == ref.begin()); 223d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_TRUE(ifl_it == ifl.begin()); 224d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 225d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref_it = ref.erase_after(ref.before_begin()); 226d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl_it = ifl.erase_after(ifl.before_begin()); 227d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 228d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko CHECK_EQ(std::distance(ref.begin(), ref.end()), 0); 229d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko CHECK(ref_it == ref.begin()); 230d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_TRUE(ifl_it == ifl.begin()); 231d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko} 232d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 233d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir MarkoTEST(IntrusiveForwardList, EraseAfter2) { 234d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::forward_list<int> ref({ 1, 2, 7, 4, 5, 3, 2, 8, 9 }); 235d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::vector<IFLTestValue> storage(ref.begin(), ref.end()); 236d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko IntrusiveForwardList<IFLTestValue> ifl(storage.begin(), storage.end()); 237d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 238d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko CHECK_EQ(std::distance(ref.begin(), ref.end()), 9); 239d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 240d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko auto ref_it = ref.begin(); 241d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko auto ifl_it = ifl.begin(); 242d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::advance(ref_it, 3); 243d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::advance(ifl_it, 3); 244d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref_it = ref.erase_after(ref.begin(), ref_it); 245d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl_it = ifl.erase_after(ifl.begin(), ifl_it); 246d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 247d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_EQ(std::distance(ref.begin(), ref_it), std::distance(ifl.begin(), ifl_it)); 248d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko CHECK_EQ(std::distance(ref.begin(), ref.end()), 7); 249d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 250d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref_it = ref.erase_after(ref_it, ref.end()); 251d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl_it = ifl.erase_after(ifl_it, ifl.end()); 252d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 253d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko CHECK(ref_it == ref.end()); 254d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_TRUE(ifl_it == ifl.end()); 255d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko CHECK_EQ(std::distance(ref.begin(), ref.end()), 2); 256d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 257d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref_it = ref.erase_after(ref.before_begin(), ref.end()); 258d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl_it = ifl.erase_after(ifl.before_begin(), ifl.end()); 259d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 260d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko CHECK(ref_it == ref.end()); 261d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_TRUE(ifl_it == ifl.end()); 262d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko CHECK_EQ(std::distance(ref.begin(), ref.end()), 0); 263d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko} 264d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 265d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir MarkoTEST(IntrusiveForwardList, SwapClear) { 266d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::forward_list<int> ref1({ 1, 2, 7 }); 267d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::vector<IFLTestValue> storage1(ref1.begin(), ref1.end()); 268d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko IntrusiveForwardList<IFLTestValue> ifl1(storage1.begin(), storage1.end()); 269d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::forward_list<int> ref2({ 3, 8, 6 }); 270d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::vector<IFLTestValue> storage2(ref2.begin(), ref2.end()); 271d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko IntrusiveForwardList<IFLTestValue> ifl2(storage2.begin(), storage2.end()); 272d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref1, ifl1); 273d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref2, ifl2); 274d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref1.swap(ref2); 275d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl1.swap(ifl2); 276d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref1, ifl1); 277d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref2, ifl2); 278d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref1.clear(); 279d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl1.clear(); 280d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref1, ifl1); 281d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref2, ifl2); 282d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko swap(ref1, ref2); 283d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko swap(ifl1, ifl2); 284d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref1, ifl1); 285d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref2, ifl2); 286d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref1.clear(); 287d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl1.clear(); 288d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref1, ifl1); 289d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref2, ifl2); 290d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko} 291d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 292d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir MarkoTEST(IntrusiveForwardList, SpliceAfter) { 293d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::forward_list<int> ref1({ 3, 1, 2, 7, 4, 5, 4, 8, 7 }); 294d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::forward_list<int> ref2; 295d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::vector<IFLTestValue> storage(ref1.begin(), ref1.end()); 296d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko IntrusiveForwardList<IFLTestValue> ifl1(storage.begin(), storage.end()); 297d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko IntrusiveForwardList<IFLTestValue> ifl2; 298d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref1, ifl1); 299d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref2, ifl2); 300d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 301d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko // Move everything to ref2/ifl2. 302d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref2.splice_after(ref2.before_begin(), ref1); 303d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl2.splice_after(ifl2.before_begin(), ifl1); 304d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref1, ifl1); 305d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref2, ifl2); 306d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 307d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko // Move first element (3) to ref1/ifl1. 308d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref1.splice_after(ref1.before_begin(), ref2, ref2.before_begin()); 309d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl1.splice_after(ifl1.before_begin(), ifl2, ifl2.before_begin()); 310d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref1, ifl1); 311d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref2, ifl2); 312d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 313d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko // Move second element (2) to ref1/ifl1 after the first element (3). 314d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref1.splice_after(ref1.begin(), ref2, ref2.begin()); 315d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl1.splice_after(ifl1.begin(), ifl2, ifl2.begin()); 316d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref1, ifl1); 317d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref2, ifl2); 318d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 319d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko // Move everything from ref2/ifl2 between the 2 elements now in ref1/ifl1. 320d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref1.splice_after(ref1.begin(), ref2); 321d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl1.splice_after(ifl1.begin(), ifl2); 322d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref1, ifl1); 323d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref2, ifl2); 324d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 325d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::forward_list<int> check({ 3, 1, 7, 4, 5, 4, 8, 7, 2 }); 326d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(check, ifl1); 327d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_TRUE(ifl2.empty()); 328d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 329d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko // Empty splice_after(). 330d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref2.splice_after( 331d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref2.before_begin(), ref1, ref1.before_begin(), ref1.begin()); 332d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl2.splice_after(ifl2.before_begin(), ifl1, ifl1.before_begin(), ifl1.begin()); 333d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref1, ifl1); 334d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref2, ifl2); 335d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 336d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko // Move { 1, 7 } to ref2/ifl2. 337d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko auto ref_it = ref1.begin(); 338d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko auto ifl_it = ifl1.begin(); 339d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::advance(ref_it, 3); 340d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::advance(ifl_it, 3); 341d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref2.splice_after(ref2.before_begin(), ref1, ref1.begin(), ref_it); 342d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl2.splice_after(ifl2.before_begin(), ifl1, ifl1.begin(), ifl_it); 343d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref1, ifl1); 344d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref2, ifl2); 345d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 346d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko // Move { 8, 7, 2 } to the beginning of ref1/ifl1. 347d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref_it = ref1.begin(); 348d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl_it = ifl1.begin(); 349d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::advance(ref_it, 3); 350d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::advance(ifl_it, 3); 351d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref1.splice_after(ref1.before_begin(), ref1, ref_it, ref1.end()); 352d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl1.splice_after(ifl1.before_begin(), ifl1, ifl_it, ifl1.end()); 353d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref1, ifl1); 354d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 355d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko check.assign({ 8, 7, 2, 3, 4, 5, 4 }); 356d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(check, ifl1); 357d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko check.assign({ 1, 7 }); 358d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(check, ifl2); 359d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 360d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko // Move all but the first element to ref2/ifl2. 361d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref_it = ref2.begin(); 362d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl_it = ifl2.begin(); 363d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::advance(ref_it, 1); 364d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::advance(ifl_it, 1); 365d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref2.splice_after(ref_it, ref1, ref1.begin(), ref1.end()); 366d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl2.splice_after(ifl_it, ifl1, ifl1.begin(), ifl1.end()); 367d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref1, ifl1); 368d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref2, ifl2); 369d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 370d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko check.assign({8}); 371d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(check, ifl1); 3729ef26544e6d9c438b150dfda39be61a7b4fd8b20Vladimir Marko 3739ef26544e6d9c438b150dfda39be61a7b4fd8b20Vladimir Marko // Move the first element of ref1/ifl1 to the beginning of ref1/ifl1 (do nothing). 3749ef26544e6d9c438b150dfda39be61a7b4fd8b20Vladimir Marko ref1.splice_after(ref1.before_begin(), ref1, ref1.before_begin()); 3759ef26544e6d9c438b150dfda39be61a7b4fd8b20Vladimir Marko ifl1.splice_after(ifl1.before_begin(), ifl1, ifl1.before_begin()); 3769ef26544e6d9c438b150dfda39be61a7b4fd8b20Vladimir Marko ASSERT_LISTS_EQUAL(ref1, ifl1); 3779ef26544e6d9c438b150dfda39be61a7b4fd8b20Vladimir Marko ASSERT_LISTS_EQUAL(check, ifl1); 3789ef26544e6d9c438b150dfda39be61a7b4fd8b20Vladimir Marko 3799ef26544e6d9c438b150dfda39be61a7b4fd8b20Vladimir Marko // Move the first element of ref2/ifl2 after itself (do nothing). 3809ef26544e6d9c438b150dfda39be61a7b4fd8b20Vladimir Marko ref1.splice_after(ref1.begin(), ref1, ref1.before_begin()); 3819ef26544e6d9c438b150dfda39be61a7b4fd8b20Vladimir Marko ifl1.splice_after(ifl1.begin(), ifl1, ifl1.before_begin()); 3829ef26544e6d9c438b150dfda39be61a7b4fd8b20Vladimir Marko ASSERT_LISTS_EQUAL(ref1, ifl1); 3839ef26544e6d9c438b150dfda39be61a7b4fd8b20Vladimir Marko ASSERT_LISTS_EQUAL(check, ifl1); 3849ef26544e6d9c438b150dfda39be61a7b4fd8b20Vladimir Marko 385d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko check.assign({ 1, 7, 7, 2, 3, 4, 5, 4 }); 386d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(check, ifl2); 3879ef26544e6d9c438b150dfda39be61a7b4fd8b20Vladimir Marko 3889ef26544e6d9c438b150dfda39be61a7b4fd8b20Vladimir Marko // Move the first element of ref2/ifl2 to the beginning of ref2/ifl2 (do nothing). 3899ef26544e6d9c438b150dfda39be61a7b4fd8b20Vladimir Marko ref2.splice_after(ref2.before_begin(), ref2, ref2.before_begin()); 3909ef26544e6d9c438b150dfda39be61a7b4fd8b20Vladimir Marko ifl2.splice_after(ifl2.before_begin(), ifl2, ifl2.before_begin()); 3919ef26544e6d9c438b150dfda39be61a7b4fd8b20Vladimir Marko ASSERT_LISTS_EQUAL(ref2, ifl2); 3929ef26544e6d9c438b150dfda39be61a7b4fd8b20Vladimir Marko ASSERT_LISTS_EQUAL(check, ifl2); 3939ef26544e6d9c438b150dfda39be61a7b4fd8b20Vladimir Marko 3949ef26544e6d9c438b150dfda39be61a7b4fd8b20Vladimir Marko // Move the first element of ref2/ifl2 after itself (do nothing). 3959ef26544e6d9c438b150dfda39be61a7b4fd8b20Vladimir Marko ref2.splice_after(ref2.begin(), ref2, ref2.before_begin()); 3969ef26544e6d9c438b150dfda39be61a7b4fd8b20Vladimir Marko ifl2.splice_after(ifl2.begin(), ifl2, ifl2.before_begin()); 3979ef26544e6d9c438b150dfda39be61a7b4fd8b20Vladimir Marko ASSERT_LISTS_EQUAL(ref2, ifl2); 3989ef26544e6d9c438b150dfda39be61a7b4fd8b20Vladimir Marko ASSERT_LISTS_EQUAL(check, ifl2); 399d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko} 400d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 401d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir MarkoTEST(IntrusiveForwardList, Remove) { 402d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::forward_list<int> ref({ 3, 1, 2, 7, 4, 5, 4, 8, 7 }); 403d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::vector<IFLTestValue> storage(ref.begin(), ref.end()); 404d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko IntrusiveForwardList<IFLTestValue> ifl(storage.begin(), storage.end()); 405d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 406d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref.remove(1); 407d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl.remove(1); 408d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 409d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref.remove(4); 410d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl.remove(4); 411d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 412d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko auto odd = [](IFLTestValue value) { return (value.value & 1) != 0; }; // NOLINT(readability/braces) 413d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref.remove_if(odd); 414d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl.remove_if(odd); 415d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 416d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko auto all = [](IFLTestValue value ATTRIBUTE_UNUSED) { return true; }; // NOLINT(readability/braces) 417d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref.remove_if(all); 418d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl.remove_if(all); 419d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 420d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko} 421d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 422d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir MarkoTEST(IntrusiveForwardList, Unique) { 423d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::forward_list<int> ref({ 3, 1, 1, 2, 3, 3, 7, 7, 4, 4, 5, 7 }); 424d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::vector<IFLTestValue> storage(ref.begin(), ref.end()); 425d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko IntrusiveForwardList<IFLTestValue> ifl(storage.begin(), storage.end()); 426d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 427d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref.unique(); 428d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl.unique(); 429d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 430d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::forward_list<int> check({ 3, 1, 2, 3, 7, 4, 5, 7 }); 431d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(check, ifl); 432d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 433d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko auto bin_pred = [](IFLTestValue lhs, IFLTestValue rhs) { 434d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko return (lhs.value & ~1) == (rhs.value & ~1); 435d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko }; 436d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref.unique(bin_pred); 437d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl.unique(bin_pred); 438d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 439d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko check.assign({ 3, 1, 2, 7, 4, 7 }); 440d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(check, ifl); 441d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko} 442d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 443d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir MarkoTEST(IntrusiveForwardList, Merge) { 444d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::forward_list<int> ref1({ 1, 4, 8, 8, 12 }); 445d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::vector<IFLTestValue> storage1(ref1.begin(), ref1.end()); 446d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko IntrusiveForwardList<IFLTestValue> ifl1(storage1.begin(), storage1.end()); 447d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::forward_list<int> ref2({ 3, 5, 6, 7, 9 }); 448d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::vector<IFLTestValue> storage2(ref2.begin(), ref2.end()); 449d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko IntrusiveForwardList<IFLTestValue> ifl2(storage2.begin(), storage2.end()); 450d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref1, ifl1); 451d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref2, ifl2); 452d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko CHECK(std::is_sorted(ref1.begin(), ref1.end())); 453d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko CHECK(std::is_sorted(ref2.begin(), ref2.end())); 454d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref1.merge(ref2); 455d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl1.merge(ifl2); 456d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref1, ifl1); 457d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref2, ifl2); 458d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko CHECK(ref2.empty()); 459d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::forward_list<int> check({ 1, 3, 4, 5, 6, 7, 8, 8, 9, 12 }); 460d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(check, ifl1); 461d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko} 462d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 463d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir MarkoTEST(IntrusiveForwardList, Sort1) { 464d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::forward_list<int> ref({ 2, 9, 8, 3, 7, 4, 1, 5, 3, 0 }); 465d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::vector<IFLTestValue> storage(ref.begin(), ref.end()); 466d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko IntrusiveForwardList<IFLTestValue> ifl(storage.begin(), storage.end()); 467d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 468d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko CHECK(!std::is_sorted(ref.begin(), ref.end())); 469d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref.sort(); 470d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl.sort(); 471d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 472d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::forward_list<int> check({ 0, 1, 2, 3, 3, 4, 5, 7, 8, 9 }); 473d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(check, ifl); 474d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko} 475d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 476d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir MarkoTEST(IntrusiveForwardList, Sort2) { 477d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::forward_list<int> ref({ 2, 9, 8, 3, 7, 4, 1, 5, 3, 0 }); 478d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::vector<IFLTestValue> storage(ref.begin(), ref.end()); 479d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko IntrusiveForwardList<IFLTestValue> ifl(storage.begin(), storage.end()); 480d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 481d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko auto cmp = [](IFLTestValue lhs, IFLTestValue rhs) { 482d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko return (lhs.value & ~1) < (rhs.value & ~1); 483d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko }; 484d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko CHECK(!std::is_sorted(ref.begin(), ref.end(), cmp)); 485d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref.sort(cmp); 486d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl.sort(cmp); 487d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 488d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::forward_list<int> check({ 1, 0, 2, 3, 3, 4, 5, 7, 9, 8 }); 489d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(check, ifl); 490d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko} 491d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 492d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir MarkoTEST(IntrusiveForwardList, Reverse) { 493d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::forward_list<int> ref({ 8, 3, 5, 4, 1, 3 }); 494d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::vector<IFLTestValue> storage(ref.begin(), ref.end()); 495d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko IntrusiveForwardList<IFLTestValue> ifl(storage.begin(), storage.end()); 496d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 497d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko CHECK(!std::is_sorted(ref.begin(), ref.end())); 498d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ref.reverse(); 499d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ifl.reverse(); 500d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(ref, ifl); 501d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko std::forward_list<int> check({ 3, 1, 4, 5, 3, 8 }); 502d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko ASSERT_LISTS_EQUAL(check, ifl); 503d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko} 504d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko 505d59f3b1b7f5c1ab9f0731ff9dc60611e8d9a6edeVladimir Marko} // namespace art 506