blob: 8be280fcbab8d02a2e3a1f8d76a3f076895d243f [file] [log] [blame]
Ethan Nicholas838d71d2020-10-20 13:59:21 -04001/*
2 * Copyright 2020 Google LLC.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#include "src/sksl/ir/SkSLExpressionStatement.h"
9#include "src/sksl/ir/SkSLIRNode.h"
10#include "src/sksl/ir/SkSLIntLiteral.h"
11#include "src/sksl/ir/SkSLNodeArrayWrapper.h"
12
13#include "tests/Test.h"
14
15DEF_TEST(SkSLNodeArrayWrapper, r) {
16 SkSL::ExpressionArray base;
17 SkSL::NodeArrayWrapper<SkSL::IntLiteral, SkSL::Expression> wrapper(&base);
18 REPORTER_ASSERT(r, wrapper.empty());
19 base.emplace_back(new SkSL::IntLiteral(-1, 0));
20 REPORTER_ASSERT(r, !wrapper.empty());
21 base.emplace_back(new SkSL::IntLiteral(-1, 1));
22 base.emplace_back(new SkSL::IntLiteral(-1, 2));
23 REPORTER_ASSERT(r, wrapper.count() == 3);
24 REPORTER_ASSERT(r, wrapper[0].value() == 0);
25 REPORTER_ASSERT(r, wrapper[1].value() == 1);
26 REPORTER_ASSERT(r, wrapper[2].value() == 2);
27 wrapper.push_back(new SkSL::IntLiteral(-1, 3));
28 REPORTER_ASSERT(r, base.count() == 4);
29 REPORTER_ASSERT(r, wrapper.count() == 4);
30 REPORTER_ASSERT(r, wrapper[3].value() == 3);
31 auto iter = wrapper.begin();
32 int i = 0;
33 while (iter != wrapper.end()) {
34 REPORTER_ASSERT(r, wrapper[i].value() == iter->value());
35 ++i;
36 ++iter;
37 }
38
39 const SkSL::NodeArrayWrapper<SkSL::IntLiteral, SkSL::Expression> copy(wrapper);
40 SkSL::NodeArrayWrapper<SkSL::IntLiteral, SkSL::Expression>::const_iterator constIter =
41 copy.begin();
42 i = 0;
43 while (constIter != copy.end()) {
44 REPORTER_ASSERT(r, copy[i].value() == constIter->value());
45 ++i;
46 ++constIter;
47 }
48
49 REPORTER_ASSERT(r, wrapper.front().value() == 0);
50 REPORTER_ASSERT(r, wrapper.back().value() == 3);
51 wrapper.pop_back();
52 REPORTER_ASSERT(r, wrapper.back().value() == 2);
53 wrapper.reset();
54 REPORTER_ASSERT(r, wrapper.empty());
55}
56
57DEF_TEST(SkSLConstNodeArrayWrapper, r) {
58 SkSL::ExpressionArray base;
59 SkSL::ConstNodeArrayWrapper<SkSL::IntLiteral, SkSL::Expression> wrapper(&base);
60 REPORTER_ASSERT(r, wrapper.empty());
61 base.emplace_back(new SkSL::IntLiteral(-1, 0));
62 REPORTER_ASSERT(r, !wrapper.empty());
63 base.emplace_back(new SkSL::IntLiteral(-1, 1));
64 base.emplace_back(new SkSL::IntLiteral(-1, 2));
65 REPORTER_ASSERT(r, wrapper.count() == 3);
66 REPORTER_ASSERT(r, wrapper[0].value() == 0);
67 REPORTER_ASSERT(r, wrapper[1].value() == 1);
68 REPORTER_ASSERT(r, wrapper[2].value() == 2);
69 auto iter = wrapper.begin();
70 int i = 0;
71 while (iter != wrapper.end()) {
72 REPORTER_ASSERT(r, wrapper[i].value() == iter->value());
73 ++i;
74 ++iter;
75 }
76 REPORTER_ASSERT(r, wrapper.front().value() == 0);
77 REPORTER_ASSERT(r, wrapper.back().value() == 2);
78}