1341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker/* 2341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * Copyright 2018 The Android Open Source Project 3341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * 4341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * Licensed under the Apache License, Version 2.0 (the "License"); 5341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * you may not use this file except in compliance with the License. 6341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * You may obtain a copy of the License at 7341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * 8341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * http://www.apache.org/licenses/LICENSE-2.0 9341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * 10341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * Unless required by applicable law or agreed to in writing, software 11341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * distributed under the License is distributed on an "AS IS" BASIS, 12341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * See the License for the specific language governing permissions and 14341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker * limitations under the License. 15341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker */ 16341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 17341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker#include <gtest/gtest.h> 18341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker#include <memory> 19341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 20341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker#include "packet.h" 21341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker#include "packet_test_common.h" 22341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker#include "test_packets.h" 23341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 24341ab2befa059e859cdc67655d83bac14980ea9eAjay Panickernamespace bluetooth { 25341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 26341ab2befa059e859cdc67655d83bac14980ea9eAjay Panickerusing pair = std::pair<size_t, size_t>; 27341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 28341ab2befa059e859cdc67655d83bac14980ea9eAjay Panickerclass IteratorTest 29341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker : public ::testing::TestWithParam<std::pair<size_t, size_t>> { 30341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker public: 31341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker std::shared_ptr<TestPacket> GetTestPacket() { 32341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker auto bounds = GetParam(); 33341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker auto lower_bound = bounds.first; 34341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker auto upper_bound = bounds.second; 35341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 36341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker return TestPacket::Make(test_l2cap_data, lower_bound, upper_bound); 37341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker } 38341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 39341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker size_t GetTestPacketLength() { return GetParam().second - GetParam().first; } 40341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 41341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker size_t GetLowerBound() { return GetParam().first; } 42341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 43341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker size_t GetUpperBound() { return GetParam().second; } 44341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker}; 45341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 46341ab2befa059e859cdc67655d83bac14980ea9eAjay PanickerINSTANTIATE_TEST_CASE_P(IteratorParameterTest, IteratorTest, 47341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker ::testing::Values(pair(0, test_l2cap_data.size()), 48341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker pair(3, test_l2cap_data.size() - 2))); 49341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 50341ab2befa059e859cdc67655d83bac14980ea9eAjay PanickerTEST_F(IteratorTest, iteratorCreateDeathTest) { 51341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker auto packet = 52341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker TestPacket::Make(test_l2cap_data, 3, test_l2cap_data.size() - 2); 53341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker ASSERT_DEATH(Iterator(packet, 0), "index_ >= packet->packet_start_index_"); 54341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker ASSERT_DEATH(Iterator(packet, test_l2cap_data.size()), 55341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker "index_ <= packet->packet_end_index_"); 56341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker} 57341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 58341ab2befa059e859cdc67655d83bac14980ea9eAjay PanickerTEST_F(IteratorTest, extractTest) { 59341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker auto packet = TestPacket::Make(test_l2cap_data); 60341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker Iterator general_case = packet->begin(); 61341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 62341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker ASSERT_EQ(0x02u, general_case.extract<uint8_t>()); 63341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker ASSERT_EQ(0x2edcu, general_case.extract<uint16_t>()); 64341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker ASSERT_EQ(0x00620066u, general_case.extract<uint32_t>()); 65341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker ASSERT_EQ(0x00010000000a0013u, general_case.extract<uint64_t>()); 66341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker} 67341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 68341ab2befa059e859cdc67655d83bac14980ea9eAjay PanickerTEST_P(IteratorTest, payloadBoundsTest) { 69341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker auto packet = GetTestPacket(); 70341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker ASSERT_EQ(static_cast<size_t>(packet->end() - packet->begin()), 71341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker GetTestPacketLength()); 72341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 73341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker auto it = packet->begin(); 74341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker for (size_t i = 0; i < GetTestPacketLength(); i++) { 75341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker ASSERT_EQ(test_l2cap_data[i + GetLowerBound()], *it++); 76341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker } 77341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker} 78341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 79341ab2befa059e859cdc67655d83bac14980ea9eAjay PanickerTEST_P(IteratorTest, extractBoundsDeathTest) { 80341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker auto packet = GetTestPacket(); 81341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker Iterator bounds_test = packet->end(); 82341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker ASSERT_DEATH(bounds_test.extract<uint8_t>(), 83341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker "index_ != packet_->packet_end_index_"); 84341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker ASSERT_DEATH(bounds_test.extract<uint16_t>(), 85341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker "index_ != packet_->packet_end_index_"); 86341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker ASSERT_DEATH(bounds_test.extract<uint32_t>(), 87341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker "index_ != packet_->packet_end_index_"); 88341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker ASSERT_DEATH(bounds_test.extract<uint64_t>(), 89341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker "index_ != packet_->packet_end_index_"); 90341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker} 91341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 92341ab2befa059e859cdc67655d83bac14980ea9eAjay PanickerTEST_P(IteratorTest, dereferenceDeathTest) { 93341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker auto packet = GetTestPacket(); 94341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker Iterator dereference_test = packet->end(); 95341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 96341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker ASSERT_EQ((*packet)[GetTestPacketLength() - 1], 97341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker *(dereference_test - static_cast<size_t>(1))); 98341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker ASSERT_DEATH(*dereference_test, "index_ != packet_->packet_end_index_"); 99341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker} 100341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 101341ab2befa059e859cdc67655d83bac14980ea9eAjay PanickerTEST_P(IteratorTest, plusEqTest) { 102341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker auto packet = GetTestPacket(); 103341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker Iterator plus_eq = packet->begin(); 104341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker for (size_t i = 0; i < GetTestPacketLength(); i += 2) { 105341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker ASSERT_EQ(test_l2cap_data[i + GetLowerBound()], *plus_eq) 106341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker << "+= test: Dereferenced iterator does not equal expected at index " 107341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker << i; 108341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker plus_eq += 2; 109341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker } 110341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 111341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker ASSERT_EQ(plus_eq, packet->end()); 112341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker} 113341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 114341ab2befa059e859cdc67655d83bac14980ea9eAjay PanickerTEST_P(IteratorTest, preIncrementTest) { 115341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker auto packet = GetTestPacket(); 116341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker Iterator plus_plus = packet->begin(); 117341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker for (size_t i = 0; i < GetTestPacketLength() - 1; i++) { 118341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker ASSERT_EQ(test_l2cap_data[i + GetLowerBound() + 1], *(++plus_plus)) 119341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker << "Pre-increment test: Dereferenced iterator does not equal expected " 120341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker << "at index " << i; 121341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker } 122341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker} 123341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 124341ab2befa059e859cdc67655d83bac14980ea9eAjay PanickerTEST_P(IteratorTest, postIncrementTest) { 125341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker auto packet = GetTestPacket(); 126341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker Iterator plus_plus = packet->begin(); 127341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker for (size_t i = 0; i < GetTestPacketLength(); i++) { 128341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker ASSERT_EQ(test_l2cap_data[i + GetLowerBound()], *(plus_plus++)) 129341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker << "Post-increment test: Dereferenced iterator does not equal expected " 130341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker << "at index " << i; 131341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker } 132341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker} 133341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 134341ab2befa059e859cdc67655d83bac14980ea9eAjay PanickerTEST_P(IteratorTest, additionTest) { 135341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker auto packet = GetTestPacket(); 136341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker Iterator plus = packet->begin(); 137341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker for (size_t i = 0; i < GetTestPacketLength(); i++) { 138341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker ASSERT_EQ(test_l2cap_data[i + GetLowerBound()], *plus) 139341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker << "+ test: Dereferenced iterator does not equal expected at index " 140341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker << i; 141341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker plus = plus + static_cast<size_t>(1); 142341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker } 143341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker} 144341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 145341ab2befa059e859cdc67655d83bac14980ea9eAjay PanickerTEST_P(IteratorTest, minusEqTest) { 146341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker auto packet = GetTestPacket(); 147341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker Iterator minus_eq = packet->end(); 148341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker minus_eq -= 1; 149341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker for (int i = GetTestPacketLength() - 1; i > 0; i -= 2) { 150341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker ASSERT_EQ(test_l2cap_data[static_cast<size_t>(i) + GetLowerBound()], 151341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker *minus_eq) 152341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker << "-= test: Dereferenced iterator does not equal expected at index " 153341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker << i; 154341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker minus_eq -= 2; 155341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker } 156341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker} 157341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 158341ab2befa059e859cdc67655d83bac14980ea9eAjay PanickerTEST_P(IteratorTest, preDecrementTest) { 159341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker auto packet = GetTestPacket(); 160341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker Iterator minus_minus = packet->end(); 161341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker for (int i = GetTestPacketLength(); i > 0; i--) { 162341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker ASSERT_EQ(test_l2cap_data[static_cast<size_t>(i) + GetLowerBound() - 1], 163341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker *(--minus_minus)) 164341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker << "Pre-decrement test: Dereferenced iterator does not equal expected " 165341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker << "at index " << i; 166341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker } 167341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker} 168341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 169341ab2befa059e859cdc67655d83bac14980ea9eAjay PanickerTEST_P(IteratorTest, postDecrementTest) { 170341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker auto packet = GetTestPacket(); 171341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker Iterator minus_minus = packet->end(); 172341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker minus_minus--; 173341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker for (int i = GetTestPacketLength() - 1; i > 0; i--) { 174341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker ASSERT_EQ(test_l2cap_data[static_cast<size_t>(i) + GetLowerBound()], 175341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker *(minus_minus--)) 176341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker << "Post-decrement test: Dereferenced iterator does not equal expected " 177341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker << "at index " << i; 178341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker } 179341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker} 180341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 181341ab2befa059e859cdc67655d83bac14980ea9eAjay PanickerTEST_P(IteratorTest, subtractionTest) { 182341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker auto packet = GetTestPacket(); 183341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker Iterator minus = packet->end(); 184341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker minus = minus - static_cast<size_t>(1); 185341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker for (int i = GetTestPacketLength() - 1; i > 0; i--) { 186341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker ASSERT_EQ(test_l2cap_data[static_cast<size_t>(i) + GetLowerBound()], *minus) 187341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker << "- test: Dereferenced iterator does not equal expected at index " 188341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker << i; 189341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker minus = minus - static_cast<size_t>(1); 190341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker } 191341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker} 192341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 193341ab2befa059e859cdc67655d83bac14980ea9eAjay PanickerTEST_P(IteratorTest, plusEqBoundsTest) { 194341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker auto packet = GetTestPacket(); 195341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker Iterator plus_eq = packet->end(); 196341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker for (size_t i = 0; i < 100; i++) { 197341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker plus_eq += i; 198341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker ASSERT_EQ(packet->end(), plus_eq) 199341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker << "+= test: Iterator exceeded the upper bound set by get_length()"; 200341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker } 201341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker} 202341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 203341ab2befa059e859cdc67655d83bac14980ea9eAjay PanickerTEST_P(IteratorTest, preIncrementBoundsTest) { 204341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker auto packet = GetTestPacket(); 205341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker Iterator plus_plus = packet->end(); 206341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker plus_plus--; 207341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker for (size_t i = 0; i < 100; i++) { 208341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker ASSERT_EQ(packet->end(), ++plus_plus) 209341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker << "Pre-increment test: Iterator exceeded the upper bound set " 210341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker "by get_length()"; 211341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker } 212341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker} 213341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 214341ab2befa059e859cdc67655d83bac14980ea9eAjay PanickerTEST_P(IteratorTest, postIncrementBoundsTest) { 215341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker auto packet = GetTestPacket(); 216341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker Iterator plus_plus = packet->end(); 217341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker for (size_t i = 0; i < 100; i++) { 218341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker ASSERT_EQ(packet->end(), plus_plus++) 219341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker << "Post-increment test: Iterator exceeded the upper bound set " 220341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker "by get_length()"; 221341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker } 222341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker} 223341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 224341ab2befa059e859cdc67655d83bac14980ea9eAjay PanickerTEST_P(IteratorTest, additionBoundsTest) { 225341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker auto packet = GetTestPacket(); 226341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker Iterator plus = packet->end(); 227341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker for (size_t i = 0; i < 100; i++) { 228341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker plus = plus + static_cast<size_t>(i); 229341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker ASSERT_EQ(packet->end(), plus) 230341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker << "+ test: Iterator exceeded the upper bound set by get_length()"; 231341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker } 232341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker} 233341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 234341ab2befa059e859cdc67655d83bac14980ea9eAjay PanickerTEST_P(IteratorTest, minusEqBoundsTest) { 235341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker auto packet = GetTestPacket(); 236341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker Iterator minus_eq = packet->begin(); 237341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker for (size_t i = 0; i < 100; i++) { 238341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker minus_eq -= i; 239341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker ASSERT_EQ(test_l2cap_data[GetLowerBound()], *minus_eq) 240341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker << "-= test: Iterator is less than the lower bound set by " 241341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker "packet->begin()"; 242341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker } 243341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker} 244341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 245341ab2befa059e859cdc67655d83bac14980ea9eAjay PanickerTEST_P(IteratorTest, preDecrementBoundsTest) { 246341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker auto packet = GetTestPacket(); 247341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker Iterator minus_minus = packet->begin(); 248341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker for (size_t i = 0; i < 100; i++) { 249341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker ASSERT_EQ(test_l2cap_data[GetLowerBound()], *(--minus_minus)) 250341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker << "Pre-decrement test: Iterator is less than the lower bound set by " 251341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker "packet->begin()"; 252341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker } 253341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker} 254341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 255341ab2befa059e859cdc67655d83bac14980ea9eAjay PanickerTEST_P(IteratorTest, postDecrementBoundsTest) { 256341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker auto packet = GetTestPacket(); 257341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker Iterator minus_minus = packet->begin(); 258341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker for (size_t i = 0; i < 100; i++) { 259341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker ASSERT_EQ(test_l2cap_data[GetLowerBound()], *(minus_minus--)) 260341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker << "Post-decrement test: Iterator is less than the lower bound set by " 261341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker "packet->begin()"; 262341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker } 263341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker} 264341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 265341ab2befa059e859cdc67655d83bac14980ea9eAjay PanickerTEST_P(IteratorTest, subtractionBoundsTest) { 266341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker auto packet = GetTestPacket(); 267341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker Iterator minus = packet->begin(); 268341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker for (size_t i = 0; i < 100; i++) { 269341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker minus = minus - static_cast<size_t>(i); 270341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker ASSERT_EQ(test_l2cap_data[GetLowerBound()], *minus) 271341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker << "- test: Iterator is less than the lower bound set " 272341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker "by packet->begin()"; 273341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker } 274341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker} 275341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker 276341ab2befa059e859cdc67655d83bac14980ea9eAjay Panicker} // namespace bluetooth