1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/*
2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver[The "BSD licence"]
3324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverCopyright (c) 2005-2007 Kunle Odutola
4324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverAll rights reserved.
5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
6324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverRedistribution and use in source and binary forms, with or without
7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvermodification, are permitted provided that the following conditions
8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverare met:
9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver1. Redistributions of source code MUST RETAIN the above copyright
10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver   notice, this list of conditions and the following disclaimer.
11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver2. Redistributions in binary form MUST REPRODUCE the above copyright
12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver   notice, this list of conditions and the following disclaimer in
13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver   the documentation and/or other materials provided with the
14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver   distribution.
15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver3. The name of the author may not be used to endorse or promote products
16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver   derived from this software without specific prior WRITTEN permission.
17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver4. Unless explicitly state otherwise, any contribution intentionally
18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver   submitted for inclusion in this work to the copyright owner or licensor
19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver   shall be under the terms and conditions of this license, without any
20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver   additional terms or conditions.
21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
22324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverTHIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
23324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverIMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
24324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
25324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverIN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
26324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
27324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverNOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverTHEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
31324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverTHIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*/
33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvernamespace Antlr.Runtime.Tests
36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver{
37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	using System;
38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	using StringBuilder = System.Text.StringBuilder;
39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	using IToken = Antlr.Runtime.IToken;
41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	using CommonToken = Antlr.Runtime.CommonToken;
42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	using ITree = Antlr.Runtime.Tree.ITree;
43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	using ITreeAdaptor = Antlr.Runtime.Tree.ITreeAdaptor;
44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	using CommonTree = Antlr.Runtime.Tree.CommonTree;
45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	using CommonTreeAdaptor = Antlr.Runtime.Tree.CommonTreeAdaptor;
46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	using MbUnit.Framework;
48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	[TestFixture]
50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	public class ITreeFixture : TestFixtureBase
51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	{
52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		#region CommonTree Tests
53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void testSingleNode()
56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree t = new CommonTree(new CommonToken(101));
58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.IsNull(t.Parent);
59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(-1, t.ChildIndex);
60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void test4Nodes()
64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			// ^(101 ^(102 103) 104)
66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree r0 = new CommonTree(new CommonToken(101));
67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			r0.AddChild(new CommonTree(new CommonToken(102)));
68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			r0.GetChild(0).AddChild(new CommonTree(new CommonToken(103)));
69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			r0.AddChild(new CommonTree(new CommonToken(104)));
70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.IsNull(r0.Parent);
72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(-1, r0.ChildIndex);
73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void testList()
77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			// ^(nil 101 102 103)
79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree r0 = new CommonTree((IToken)null);
80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree c0, c1, c2;
81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			r0.AddChild(c0 = new CommonTree(new CommonToken(101)));
82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			r0.AddChild(c1 = new CommonTree(new CommonToken(102)));
83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			r0.AddChild(c2 = new CommonTree(new CommonToken(103)));
84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.IsNull(r0.Parent);
86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(-1, r0.ChildIndex);
87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(r0, c0.Parent);
88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(0, c0.ChildIndex);
89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(r0, c1.Parent);
90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, c1.ChildIndex);
91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(r0, c2.Parent);
92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(2, c2.ChildIndex);
93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void testList2()
97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
98324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			// Add child ^(nil 101 102 103) to root 5
99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			// should pull 101 102 103 directly to become 5's child list
100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree root = new CommonTree(new CommonToken(5));
101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			// child tree
103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree r0 = new CommonTree((IToken)null);
104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree c0, c1, c2;
105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			r0.AddChild(c0 = new CommonTree(new CommonToken(101)));
106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			r0.AddChild(c1 = new CommonTree(new CommonToken(102)));
107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			r0.AddChild(c2 = new CommonTree(new CommonToken(103)));
108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			root.AddChild(r0);
110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.IsNull(root.Parent);
112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(-1, root.ChildIndex);
113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			// check children of root all point at root
114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(root, c0.Parent);
115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(0, c0.ChildIndex);
116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(root, c0.Parent);
117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, c1.ChildIndex);
118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(root, c0.Parent);
119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(2, c2.ChildIndex);
120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void testAddListToExistChildren()
124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			// Add child ^(nil 101 102 103) to root ^(5 6)
126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			// should add 101 102 103 to end of 5's child list
127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree root = new CommonTree(new CommonToken(5));
128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			root.AddChild(new CommonTree(new CommonToken(6)));
129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			// child tree
131324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree r0 = new CommonTree((IToken)null);
132324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree c0, c1, c2;
133324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			r0.AddChild(c0 = new CommonTree(new CommonToken(101)));
134324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			r0.AddChild(c1 = new CommonTree(new CommonToken(102)));
135324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			r0.AddChild(c2 = new CommonTree(new CommonToken(103)));
136324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
137324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			root.AddChild(r0);
138324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
139324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.IsNull(root.Parent);
140324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(-1, root.ChildIndex);
141324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			// check children of root all point at root
142324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(root, c0.Parent);
143324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(1, c0.ChildIndex);
144324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(root, c0.Parent);
145324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(2, c1.ChildIndex);
146324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(root, c0.Parent);
147324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(3, c2.ChildIndex);
148324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
149324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
150324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
151324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void testDupTree()
152324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
153324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			// ^(101 ^(102 103 ^(106 107) ) 104 105)
154324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree r0 = new CommonTree(new CommonToken(101));
155324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree r1 = new CommonTree(new CommonToken(102));
156324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			r0.AddChild(r1);
157324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			r1.AddChild(new CommonTree(new CommonToken(103)));
158324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			ITree r2 = new CommonTree(new CommonToken(106));
159324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			r2.AddChild(new CommonTree(new CommonToken(107)));
160324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			r1.AddChild(r2);
161324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			r0.AddChild(new CommonTree(new CommonToken(104)));
162324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			r0.AddChild(new CommonTree(new CommonToken(105)));
163324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
164324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree dup = (CommonTree)(new CommonTreeAdaptor()).DupTree(r0);
165324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
166324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.IsNull(dup.Parent);
167324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(-1, dup.ChildIndex);
168324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			dup.SanityCheckParentAndChildIndexes();
169324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
170324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
171324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
172324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void testBecomeRoot()
173324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
174324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			// 5 becomes new root of ^(nil 101 102 103)
175324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree newRoot = new CommonTree(new CommonToken(5));
176324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
177324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree oldRoot = new CommonTree((IToken)null);
178324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			oldRoot.AddChild(new CommonTree(new CommonToken(101)));
179324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			oldRoot.AddChild(new CommonTree(new CommonToken(102)));
180324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			oldRoot.AddChild(new CommonTree(new CommonToken(103)));
181324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
182324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			ITreeAdaptor adaptor = new CommonTreeAdaptor();
183324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			adaptor.BecomeRoot(newRoot, oldRoot);
184324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			newRoot.SanityCheckParentAndChildIndexes();
185324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
186324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
187324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
188324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void testBecomeRoot2()
189324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
190324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			// 5 becomes new root of ^(101 102 103)
191324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree newRoot = new CommonTree(new CommonToken(5));
192324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
193324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree oldRoot = new CommonTree(new CommonToken(101));
194324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			oldRoot.AddChild(new CommonTree(new CommonToken(102)));
195324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			oldRoot.AddChild(new CommonTree(new CommonToken(103)));
196324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
197324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			ITreeAdaptor adaptor = new CommonTreeAdaptor();
198324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			adaptor.BecomeRoot(newRoot, oldRoot);
199324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			newRoot.SanityCheckParentAndChildIndexes();
200324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
201324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
202324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
203324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void testBecomeRoot3()
204324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
205324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			// ^(nil 5) becomes new root of ^(nil 101 102 103)
206324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree newRoot = new CommonTree((IToken)null);
207324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			newRoot.AddChild(new CommonTree(new CommonToken(5)));
208324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
209324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree oldRoot = new CommonTree((IToken)null);
210324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			oldRoot.AddChild(new CommonTree(new CommonToken(101)));
211324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			oldRoot.AddChild(new CommonTree(new CommonToken(102)));
212324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			oldRoot.AddChild(new CommonTree(new CommonToken(103)));
213324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
214324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			ITreeAdaptor adaptor = new CommonTreeAdaptor();
215324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			adaptor.BecomeRoot(newRoot, oldRoot);
216324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			newRoot.SanityCheckParentAndChildIndexes();
217324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
218324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
219324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
220324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void testBecomeRoot5()
221324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
222324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			// ^(nil 5) becomes new root of ^(101 102 103)
223324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree newRoot = new CommonTree((IToken)null);
224324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			newRoot.AddChild(new CommonTree(new CommonToken(5)));
225324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
226324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree oldRoot = new CommonTree(new CommonToken(101));
227324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			oldRoot.AddChild(new CommonTree(new CommonToken(102)));
228324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			oldRoot.AddChild(new CommonTree(new CommonToken(103)));
229324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
230324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			ITreeAdaptor adaptor = new CommonTreeAdaptor();
231324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			adaptor.BecomeRoot(newRoot, oldRoot);
232324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			newRoot.SanityCheckParentAndChildIndexes();
233324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
234324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
235324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
236324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void testBecomeRoot6()
237324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
238324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			// emulates construction of ^(5 6)
239324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			ITreeAdaptor adaptor = new CommonTreeAdaptor();
240324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree root_0 = (CommonTree)adaptor.Nil();
241324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree root_1 = (CommonTree)adaptor.Nil();
242324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			root_1 = (CommonTree)adaptor.BecomeRoot(new CommonTree(new CommonToken(5)), root_1);
243324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
244324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			adaptor.AddChild(root_1, new CommonTree(new CommonToken(6)));
245324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
246324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			adaptor.AddChild(root_0, root_1);
247324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
248324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			root_0.SanityCheckParentAndChildIndexes();
249324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
250324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
251324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		// Test replaceChildren
252324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
253324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
254324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void testReplaceWithNoChildren()
255324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
256324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree t = new CommonTree(new CommonToken(101));
257324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree newChild = new CommonTree(new CommonToken(5));
258324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			bool error = false;
259324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			try
260324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
261324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				t.ReplaceChildren(0, 0, newChild);
262324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
263324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			catch (Exception)
264324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			{
265324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver				error = true;
266324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			}
267324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.IsTrue(error);
268324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
269324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
270324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
271324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void testReplaceWithOneChildren()
272324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
273324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			// assume token type 99 and use text
274324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree t = new CommonTree(new CommonToken(99, "a"));
275324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree c0 = new CommonTree(new CommonToken(99, "b"));
276324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.AddChild(c0);
277324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
278324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree newChild = new CommonTree(new CommonToken(99, "c"));
279324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.ReplaceChildren(0, 0, newChild);
280324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			String expected = "(a c)";
281324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(expected, t.ToStringTree());
282324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.SanityCheckParentAndChildIndexes();
283324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
284324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
285324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
286324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void testReplaceInMiddle()
287324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
288324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree t = new CommonTree(new CommonToken(99, "a"));
289324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.AddChild(new CommonTree(new CommonToken(99, "b")));
290324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.AddChild(new CommonTree(new CommonToken(99, "c"))); // index 1
291324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.AddChild(new CommonTree(new CommonToken(99, "d")));
292324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
293324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree newChild = new CommonTree(new CommonToken(99, "x"));
294324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.ReplaceChildren(1, 1, newChild);
295324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			String expected = "(a b x d)";
296324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(expected, t.ToStringTree());
297324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.SanityCheckParentAndChildIndexes();
298324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
299324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
300324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
301324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void testReplaceAtLeft()
302324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
303324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree t = new CommonTree(new CommonToken(99, "a"));
304324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.AddChild(new CommonTree(new CommonToken(99, "b"))); // index 0
305324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.AddChild(new CommonTree(new CommonToken(99, "c")));
306324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.AddChild(new CommonTree(new CommonToken(99, "d")));
307324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
308324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree newChild = new CommonTree(new CommonToken(99, "x"));
309324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.ReplaceChildren(0, 0, newChild);
310324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			String expected = "(a x c d)";
311324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(expected, t.ToStringTree());
312324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.SanityCheckParentAndChildIndexes();
313324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
314324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
315324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
316324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void testReplaceAtRight()
317324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
318324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree t = new CommonTree(new CommonToken(99, "a"));
319324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.AddChild(new CommonTree(new CommonToken(99, "b")));
320324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.AddChild(new CommonTree(new CommonToken(99, "c")));
321324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.AddChild(new CommonTree(new CommonToken(99, "d"))); // index 2
322324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
323324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree newChild = new CommonTree(new CommonToken(99, "x"));
324324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.ReplaceChildren(2, 2, newChild);
325324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			String expected = "(a b c x)";
326324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(expected, t.ToStringTree());
327324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.SanityCheckParentAndChildIndexes();
328324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
329324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
330324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
331324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void testReplaceOneWithTwoAtLeft()
332324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
333324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			ITreeAdaptor adaptor = new CommonTreeAdaptor();
334324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree t = new CommonTree(new CommonToken(99, "a"));
335324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.AddChild(new CommonTree(new CommonToken(99, "b")));
336324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.AddChild(new CommonTree(new CommonToken(99, "c")));
337324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.AddChild(new CommonTree(new CommonToken(99, "d")));
338324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
339324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree newChildren = (CommonTree)adaptor.Nil();
340324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			newChildren.AddChild(new CommonTree(new CommonToken(99, "x")));
341324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			newChildren.AddChild(new CommonTree(new CommonToken(99, "y")));
342324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
343324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.ReplaceChildren(0, 0, newChildren);
344324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			String expected = "(a x y c d)";
345324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(expected, t.ToStringTree());
346324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.SanityCheckParentAndChildIndexes();
347324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
348324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
349324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
350324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void testReplaceOneWithTwoAtRight()
351324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
352324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			ITreeAdaptor adaptor = new CommonTreeAdaptor();
353324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree t = new CommonTree(new CommonToken(99, "a"));
354324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.AddChild(new CommonTree(new CommonToken(99, "b")));
355324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.AddChild(new CommonTree(new CommonToken(99, "c")));
356324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.AddChild(new CommonTree(new CommonToken(99, "d")));
357324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
358324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree newChildren = (CommonTree)adaptor.Nil();
359324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			newChildren.AddChild(new CommonTree(new CommonToken(99, "x")));
360324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			newChildren.AddChild(new CommonTree(new CommonToken(99, "y")));
361324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
362324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.ReplaceChildren(2, 2, newChildren);
363324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			String expected = "(a b c x y)";
364324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(expected, t.ToStringTree());
365324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.SanityCheckParentAndChildIndexes();
366324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
367324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
368324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
369324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void testReplaceOneWithTwoInMiddle()
370324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
371324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			ITreeAdaptor adaptor = new CommonTreeAdaptor();
372324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree t = new CommonTree(new CommonToken(99, "a"));
373324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.AddChild(new CommonTree(new CommonToken(99, "b")));
374324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.AddChild(new CommonTree(new CommonToken(99, "c")));
375324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.AddChild(new CommonTree(new CommonToken(99, "d")));
376324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
377324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree newChildren = (CommonTree)adaptor.Nil();
378324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			newChildren.AddChild(new CommonTree(new CommonToken(99, "x")));
379324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			newChildren.AddChild(new CommonTree(new CommonToken(99, "y")));
380324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
381324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.ReplaceChildren(1, 1, newChildren);
382324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			String expected = "(a b x y d)";
383324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(expected, t.ToStringTree());
384324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.SanityCheckParentAndChildIndexes();
385324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
386324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
387324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
388324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void testReplaceTwoWithOneAtLeft()
389324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
390324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree t = new CommonTree(new CommonToken(99, "a"));
391324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.AddChild(new CommonTree(new CommonToken(99, "b")));
392324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.AddChild(new CommonTree(new CommonToken(99, "c")));
393324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.AddChild(new CommonTree(new CommonToken(99, "d")));
394324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
395324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree newChild = new CommonTree(new CommonToken(99, "x"));
396324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
397324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.ReplaceChildren(0, 1, newChild);
398324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			String expected = "(a x d)";
399324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(expected, t.ToStringTree());
400324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.SanityCheckParentAndChildIndexes();
401324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
402324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
403324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
404324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void testReplaceTwoWithOneAtRight()
405324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
406324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree t = new CommonTree(new CommonToken(99, "a"));
407324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.AddChild(new CommonTree(new CommonToken(99, "b")));
408324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.AddChild(new CommonTree(new CommonToken(99, "c")));
409324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.AddChild(new CommonTree(new CommonToken(99, "d")));
410324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
411324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree newChild = new CommonTree(new CommonToken(99, "x"));
412324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
413324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.ReplaceChildren(1, 2, newChild);
414324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			String expected = "(a b x)";
415324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(expected, t.ToStringTree());
416324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.SanityCheckParentAndChildIndexes();
417324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
418324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
419324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
420324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void testReplaceAllWithOne()
421324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
422324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree t = new CommonTree(new CommonToken(99, "a"));
423324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.AddChild(new CommonTree(new CommonToken(99, "b")));
424324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.AddChild(new CommonTree(new CommonToken(99, "c")));
425324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.AddChild(new CommonTree(new CommonToken(99, "d")));
426324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
427324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree newChild = new CommonTree(new CommonToken(99, "x"));
428324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
429324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.ReplaceChildren(0, 2, newChild);
430324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			String expected = "(a x)";
431324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(expected, t.ToStringTree());
432324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.SanityCheckParentAndChildIndexes();
433324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
434324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
435324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		[Test]
436324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		public void testReplaceAllWithTwo()
437324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		{
438324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			ITreeAdaptor adaptor = new CommonTreeAdaptor();
439324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree t = new CommonTree(new CommonToken(99, "a"));
440324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.AddChild(new CommonTree(new CommonToken(99, "b")));
441324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.AddChild(new CommonTree(new CommonToken(99, "c")));
442324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.AddChild(new CommonTree(new CommonToken(99, "d")));
443324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
444324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			CommonTree newChildren = (CommonTree)adaptor.Nil();
445324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			newChildren.AddChild(new CommonTree(new CommonToken(99, "x")));
446324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			newChildren.AddChild(new CommonTree(new CommonToken(99, "y")));
447324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
448324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.ReplaceChildren(0, 2, newChildren);
449324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			String expected = "(a x y)";
450324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			Assert.AreEqual(expected, t.ToStringTree());
451324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver			t.SanityCheckParentAndChildIndexes();
452324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		}
453324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
454324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver		#endregion
455324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver	}
456324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}