1 | // |
2 | // immer: immutable data structures for C++ |
3 | // Copyright (C) 2016, 2017, 2018 Juan Pedro Bolivar Puente |
4 | // |
5 | // This software is distributed under the Boost Software License, Version 1.0. |
6 | // See accompanying file LICENSE or copy at http://boost.org/LICENSE_1_0.txt |
7 | // |
8 | |
9 | // Thanks Guiguiprim for reporting this issue |
10 | // https://github.com/arximboldi/immer/issues/46 |
11 | |
12 | #include <immer/flex_vector.hpp> |
13 | #include <immer/vector.hpp> |
14 | #include <immer/vector_transient.hpp> |
15 | |
16 | #include <catch.hpp> |
17 | |
18 | TEST_CASE("operator==() may return bad result" ) |
19 | { |
20 | using bool_vec = immer::flex_vector<bool>; |
21 | |
22 | immer::vector<bool_vec> v0; |
23 | auto tv = v0.transient(); |
24 | tv.push_back(bool_vec(9, false)); |
25 | tv.push_back(bool_vec(10, false)); |
26 | tv.push_back(bool_vec(8, false)); |
27 | tv.push_back(bool_vec(6, false)); |
28 | tv.push_back(bool_vec(9, false)); |
29 | tv.push_back(bool_vec(7, false)); |
30 | tv.push_back(bool_vec(8, false)); |
31 | tv.push_back(bool_vec(9, false)); |
32 | tv.push_back(bool_vec(10, false)); |
33 | v0 = tv.persistent(); |
34 | |
35 | auto v1 = v0.update(1, [](bool_vec vec) { |
36 | return vec.set(8, true); |
37 | }); |
38 | |
39 | CHECK(v0[1] != v1[1]); |
40 | CHECK(v0 != v1); |
41 | } |
42 | |