Fix the arithmetic mistakes in reverse iterator

This commit is contained in:
HenryLee 2017-05-29 18:52:53 +10:00
parent ed62129f8e
commit adc73d6d5f
2 changed files with 17 additions and 17 deletions

View file

@ -8672,7 +8672,7 @@ class basic_json
json_reverse_iterator operator+(difference_type i) const json_reverse_iterator operator+(difference_type i) const
{ {
auto result = *this; auto result = *this;
result += i; result -= i;
return result; return result;
} }
@ -8680,14 +8680,14 @@ class basic_json
json_reverse_iterator operator-(difference_type i) const json_reverse_iterator operator-(difference_type i) const
{ {
auto result = *this; auto result = *this;
result -= i; result += i;
return result; return result;
} }
/// return difference /// return difference
difference_type operator-(const json_reverse_iterator& other) const difference_type operator-(const json_reverse_iterator& other) const
{ {
return this->base() - other.base(); return other.base() - this->base();
} }
/// access to successor /// access to successor

View file

@ -747,7 +747,7 @@ TEST_CASE("iterators 2")
it += 3; it += 3;
CHECK((j_array.rbegin() + 3) == it); CHECK((j_array.rbegin() + 3) == it);
CHECK((it - 3) == j_array.rbegin()); CHECK((it - 3) == j_array.rbegin());
CHECK((j_array.rbegin() - it) == 3); CHECK((it - j_array.rbegin()) == 3);
CHECK(*it == json(3)); CHECK(*it == json(3));
it -= 2; it -= 2;
CHECK(*it == json(5)); CHECK(*it == json(5));
@ -757,7 +757,7 @@ TEST_CASE("iterators 2")
it += 3; it += 3;
CHECK((j_array.crbegin() + 3) == it); CHECK((j_array.crbegin() + 3) == it);
CHECK((it - 3) == j_array.crbegin()); CHECK((it - 3) == j_array.crbegin());
CHECK((j_array.crbegin() - it) == 3); CHECK((it - j_array.crbegin()) == 3);
CHECK(*it == json(3)); CHECK(*it == json(3));
it -= 2; it -= 2;
CHECK(*it == json(5)); CHECK(*it == json(5));
@ -769,9 +769,9 @@ TEST_CASE("iterators 2")
{ {
auto it = j_null.rbegin(); auto it = j_null.rbegin();
it += 3; it += 3;
CHECK((j_null.rbegin() + 3) == it); CHECK((j_null.rbegin() - 3) == it);
CHECK((it - 3) == j_null.rbegin()); CHECK((it + 3) == j_null.rbegin());
CHECK((j_null.rbegin() - it) == 3); CHECK((it - j_null.rbegin()) == 3);
CHECK(it != j_null.rend()); CHECK(it != j_null.rend());
it -= 3; it -= 3;
CHECK(it == j_null.rend()); CHECK(it == j_null.rend());
@ -779,9 +779,9 @@ TEST_CASE("iterators 2")
{ {
auto it = j_null.crbegin(); auto it = j_null.crbegin();
it += 3; it += 3;
CHECK((j_null.crbegin() + 3) == it); CHECK((j_null.crbegin() - 3) == it);
CHECK((it - 3) == j_null.crbegin()); CHECK((it + 3) == j_null.crbegin());
CHECK((j_null.crbegin() - it) == 3); CHECK((it - j_null.crbegin()) == 3);
CHECK(it != j_null.crend()); CHECK(it != j_null.crend());
it -= 3; it -= 3;
CHECK(it == j_null.crend()); CHECK(it == j_null.crend());
@ -793,9 +793,9 @@ TEST_CASE("iterators 2")
{ {
auto it = j_value.rbegin(); auto it = j_value.rbegin();
it += 3; it += 3;
CHECK((j_value.rbegin() + 3) == it); CHECK((j_value.rbegin() - 3) == it);
CHECK((it - 3) == j_value.rbegin()); CHECK((it + 3) == j_value.rbegin());
CHECK((j_value.rbegin() - it) == 3); CHECK((it - j_value.rbegin()) == 3);
CHECK(it != j_value.rend()); CHECK(it != j_value.rend());
it -= 3; it -= 3;
CHECK(*it == json(42)); CHECK(*it == json(42));
@ -803,9 +803,9 @@ TEST_CASE("iterators 2")
{ {
auto it = j_value.crbegin(); auto it = j_value.crbegin();
it += 3; it += 3;
CHECK((j_value.crbegin() + 3) == it); CHECK((j_value.crbegin() - 3) == it);
CHECK((it - 3) == j_value.crbegin()); CHECK((it + 3) == j_value.crbegin());
CHECK((j_value.crbegin() - it) == 3); CHECK((it - j_value.crbegin()) == 3);
CHECK(it != j_value.crend()); CHECK(it != j_value.crend());
it -= 3; it -= 3;
CHECK(*it == json(42)); CHECK(*it == json(42));