summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAndres Noetzli <andres.noetzli@gmail.com>2021-07-01 21:44:47 -0700
committerGitHub <noreply@github.com>2021-07-02 04:44:47 +0000
commit89cfae28cfa8013db596f2cb766b07e2188c5610 (patch)
tree68f0c86390b3ffb9ba67975e13d7937c23adbb78 /test
parentb4e98013a8e2572545ec3f637dd1caa06e3f7207 (diff)
Add reverse iterators to `Node`/`TNode` (#6825)
This feature is useful for example for succinctly inserting children of a node in the reverse order. To make this work, the commit fixes the declaration of `reference` in the `NodeValue::iterator`. The `std::reverse_iterator` adapter expects the `reference` type to match the return type of `operator*` in the corresponding iterator (as mandated by the standard). Despite its name, `reference` does not have to be a C++ reference. Note that we cannot actually make it a C++ reference because `NodeValue::iterator` wraps the `NodeValue*` in a `Node`/`TNode` in `operator*`.
Diffstat (limited to 'test')
-rw-r--r--test/unit/node/node_black.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/test/unit/node/node_black.cpp b/test/unit/node/node_black.cpp
index 98fabc727..522270de4 100644
--- a/test/unit/node/node_black.cpp
+++ b/test/unit/node/node_black.cpp
@@ -488,6 +488,24 @@ TEST_F(TestNodeBlackNode, iterator)
}
}
+TEST_F(TestNodeBlackNode, const_reverse_iterator)
+{
+ NodeBuilder b;
+ Node x = d_skolemManager->mkDummySkolem("x", d_nodeManager->booleanType());
+ Node y = d_skolemManager->mkDummySkolem("y", d_nodeManager->booleanType());
+ Node z = d_skolemManager->mkDummySkolem("z", d_nodeManager->booleanType());
+ Node n = b << x << y << z << kind::AND;
+
+ { // same for const iterator
+ const Node& c = n;
+ Node::const_reverse_iterator i = c.rbegin();
+ ASSERT_EQ(*i++, z);
+ ASSERT_EQ(*i++, y);
+ ASSERT_EQ(*i++, x);
+ ASSERT_EQ(i, n.rend());
+ }
+}
+
TEST_F(TestNodeBlackNode, kinded_iterator)
{
TypeNode integerType = d_nodeManager->integerType();
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback