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#include <immer/flex_vector.hpp>
10#include <cassert>
11
12int main()
13{
14 {
15// include:push-back/start
16 auto v1 = immer::flex_vector<int>{1};
17 auto v2 = v1.push_back(8);
18
19 assert((v1 == immer::flex_vector<int>{1}));
20 assert((v2 == immer::flex_vector<int>{1,8}));
21// include:push-back/end
22 }
23 {
24// include:push-front/start
25 auto v1 = immer::flex_vector<int>{1};
26 auto v2 = v1.push_front(8);
27
28 assert((v1 == immer::flex_vector<int>{1}));
29 assert((v2 == immer::flex_vector<int>{8,1}));
30// include:push-front/end
31 }
32
33 {
34// include:set/start
35 auto v1 = immer::flex_vector<int>{1,2,3};
36 auto v2 = v1.set(0,5);
37
38 assert((v1 == immer::flex_vector<int>{1,2,3}));
39 assert((v2 == immer::flex_vector<int>{5,2,3}));
40// include:set/end
41 }
42
43 {
44// include:update/start
45 auto v1 = immer::flex_vector<int>{1,2,3,4};
46 auto v2 = v1.update(2, [&] (auto l) {
47 return ++l;
48 });
49
50 assert((v1 == immer::flex_vector<int>{1,2,3,4}));
51 assert((v2 == immer::flex_vector<int>{1,2,4,4}));
52// include:update/end
53 }
54
55 {
56// include:take/start
57 auto v1 = immer::flex_vector<int>{1,2,3,4,5,6};
58 auto v2 = v1.take(3);
59
60 assert((v1 == immer::flex_vector<int>{1,2,3,4,5,6}));
61 assert((v2 == immer::flex_vector<int>{1,2,3}));
62// include:take/end
63 }
64
65 {
66// include:drop/start
67 auto v1 = immer::flex_vector<int>{1,2,3,4,5,6};
68 auto v2 = v1.drop(3);
69
70 assert((v1 == immer::flex_vector<int>{1,2,3,4,5,6}));
71 assert((v2 == immer::flex_vector<int>{4,5,6}));
72// include:drop/end
73 }
74
75 {
76// include:insert/start
77 auto v1 = immer::flex_vector<int>{1,2,3};
78 auto v2 = v1.insert(0,0);
79
80 assert((v1 == immer::flex_vector<int>{1,2,3}));
81 assert((v2 == immer::flex_vector<int>{0,1,2,3}));
82// include:insert/end
83 }
84
85 {
86// include:erase/start
87 auto v1 = immer::flex_vector<int>{1,2,3,4,5};
88 auto v2 = v1.erase(2);
89
90 assert((v1 == immer::flex_vector<int>{1,2,3,4,5}));
91 assert((v2 == immer::flex_vector<int>{1,2,4,5}));
92// include:erase/end
93 }
94
95 {
96// include:concat/start
97 auto v1 = immer::flex_vector<int>{1,2,3};
98 auto v2 = v1 + v1;
99
100 assert((v1 == immer::flex_vector<int>{1,2,3}));
101 assert((v2 == immer::flex_vector<int>{1,2,3,1,2,3}));
102// include:concat/end
103 }
104}
105