@Test public void testRemoveNodeIf() throws Exception { // remove all even elements MutableTree<Integer> tree = createMockTree(); tree.removeNodeIf( new JPredicate<TreeNode<Integer>>() { @Override public boolean apply(@Nullable TreeNode<Integer> input) { return input.getValue() % 2 == 0; } }); Assert.assertEquals(3, tree.getSize()); for (TreeNode<Integer> node : tree) { Assert.assertTrue(node.getValue() % 2 != 0); } // remove all elements tree = createMockTree(); tree.removeNodeIf( new JPredicate<TreeNode<Integer>>() { @Override public boolean apply(@Nullable TreeNode<Integer> input) { return true; } }); Assert.assertEquals(1, tree.getSize()); // remove all odd elements tree = createMockTree(); tree.removeNodeIf( new JPredicate<TreeNode<Integer>>() { @Override public boolean apply(@Nullable TreeNode<Integer> input) { return input.getValue() % 2 != 0; } }); Assert.assertEquals(5, tree.getSize()); for (TreeNode<Integer> node : tree) { if (node != tree.getRoot()) { Assert.assertTrue(node.getValue() % 2 == 0); } } }