Free cookie consent management tool by TermsFeed Policy Generator

source: branches/HeuristicLab.Problems.GrammaticalOptimization/HeuristicLab.Problems.GrammaticalOptimization.Test/TestSequence.cs @ 11733

Last change on this file since 11733 was 11730, checked in by gkronber, 8 years ago

#2283: several major extensions for grammatical optimization

File size: 7.8 KB
Line 
1using System;
2using System.Linq;
3using System.Collections.Generic;
4using System.Globalization;
5using HeuristicLab.Algorithms.Bandits;
6using Microsoft.VisualStudio.TestTools.UnitTesting;
7
8namespace HeuristicLab.Problems.GrammaticalOptimization.Test {
9  [TestClass]
10  public class TestSequence {
11
12    [TestMethod]
13    public void TestCtorAndProperties() {
14      CultureInfo.DefaultThreadCurrentCulture = CultureInfo.InvariantCulture;
15      {
16        var s = new Sequence("A");
17        Assert.AreEqual(1, s.Length);
18        Assert.AreEqual(false, s.IsTerminal);
19        Assert.AreEqual(0, s.FirstNonTerminalIndex);
20        Assert.AreEqual('A', s.FirstNonTerminal);
21      }
22      {
23        var s = new Sequence("AB");
24        Assert.AreEqual(2, s.Length);
25        Assert.AreEqual(false, s.IsTerminal);
26        Assert.AreEqual(0, s.FirstNonTerminalIndex);
27        Assert.AreEqual('A', s.FirstNonTerminal);
28      }
29      {
30        var s = new Sequence("aAB");
31        Assert.AreEqual(3, s.Length);
32        Assert.AreEqual(false, s.IsTerminal);
33        Assert.AreEqual(1, s.FirstNonTerminalIndex);
34        Assert.AreEqual('A', s.FirstNonTerminal);
35      }
36      {
37        var s = new Sequence("aaaaA");
38        Assert.AreEqual(5, s.Length);
39        Assert.AreEqual(false, s.IsTerminal);
40        Assert.AreEqual(4, s.FirstNonTerminalIndex);
41        Assert.AreEqual('A', s.FirstNonTerminal);
42      }
43      {
44        var s = new Sequence("aaaa");
45        Assert.AreEqual(4, s.Length);
46        Assert.AreEqual(true, s.IsTerminal);
47        Assert.AreEqual(-1, s.FirstNonTerminalIndex);
48        try {
49          var nt = s.FirstNonTerminal;
50          Assert.Fail();
51        }
52        catch (IndexOutOfRangeException e) {
53        }
54      }
55      {
56        var s = new Sequence("aaaaA");
57        var t = new Sequence(s);
58        Assert.AreEqual(5, t.Length);
59        Assert.AreEqual(false, t.IsTerminal);
60        Assert.AreEqual(4, t.FirstNonTerminalIndex);
61        Assert.AreEqual('A', t.FirstNonTerminal);
62
63        t.ReplaceAt(0, 1, new Sequence("Z"));
64        Assert.AreEqual(5, t.Length);
65        Assert.AreEqual(false, t.IsTerminal);
66        Assert.AreEqual(0, t.FirstNonTerminalIndex);
67        Assert.AreEqual('Z', t.FirstNonTerminal);
68
69        // s must not be changed
70        Assert.AreEqual(5, s.Length);
71        Assert.AreEqual(false, s.IsTerminal);
72        Assert.AreEqual(4, s.FirstNonTerminalIndex);
73        Assert.AreEqual('A', s.FirstNonTerminal);
74      }
75    }
76
77    [TestMethod]
78    public void TestReplaceAt() {
79      CultureInfo.DefaultThreadCurrentCulture = CultureInfo.InvariantCulture;
80      {
81        var s = new Sequence("A");
82        var t = new Sequence("B");
83
84        s.ReplaceAt(0, 1, t);
85        Assert.AreEqual('B', s.FirstNonTerminal);
86        Assert.AreEqual(1, s.Length);
87      }
88      {
89        var s = new Sequence("A");
90        var t = new Sequence("b");
91
92        s.ReplaceAt(0, 1, t);
93        Assert.AreEqual(-1, s.FirstNonTerminalIndex);
94        Assert.AreEqual(1, s.Length);
95      }
96      {
97        var s = new Sequence("a");
98        var t = new Sequence("B");
99
100        s.ReplaceAt(0, 1, t);
101        Assert.AreEqual('B', s.FirstNonTerminal);
102        Assert.AreEqual(1, s.Length);
103      }
104      {
105        var s = new Sequence("AB");
106        var t = new Sequence("a");
107
108        s.ReplaceAt(0, 1, t);
109        Assert.AreEqual(1, s.FirstNonTerminalIndex);
110        Assert.AreEqual('B', s.FirstNonTerminal);
111        Assert.AreEqual(2, s.Length);
112      }
113      {
114        var s = new Sequence("AB");
115        var t = new Sequence("aa");
116
117        s.ReplaceAt(0, 1, t);
118        Assert.AreEqual(2, s.FirstNonTerminalIndex);
119        Assert.AreEqual('B', s.FirstNonTerminal);
120        Assert.AreEqual(3, s.Length);
121        Assert.AreEqual("aaB", s.ToString());
122      }
123      {
124        var s = new Sequence("AB");
125        var t = new Sequence("bb");
126
127        s.ReplaceAt(1, 1, t);
128        Assert.AreEqual(0, s.FirstNonTerminalIndex);
129        Assert.AreEqual('A', s.FirstNonTerminal);
130        Assert.AreEqual(3, s.Length);
131        Assert.AreEqual("Abb", s.ToString());
132      }
133      {
134        var s = new Sequence("AB");
135        var t = new Sequence("aA");
136
137        s.ReplaceAt(0, 1, t);
138        Assert.AreEqual(1, s.FirstNonTerminalIndex);
139        Assert.AreEqual('A', s.FirstNonTerminal);
140        Assert.AreEqual(3, s.Length);
141        Assert.AreEqual("aAB", s.ToString());
142      }
143      {
144        var s = new Sequence("AaaB");
145        var t = new Sequence("a");
146
147        s.ReplaceAt(0, 3, t);
148        Assert.AreEqual(1, s.FirstNonTerminalIndex);
149        Assert.AreEqual('B', s.FirstNonTerminal);
150        Assert.AreEqual(2, s.Length);
151        Assert.AreEqual("aB", s.ToString());
152      }
153      {
154        var s = new Sequence("AaaB");
155        var t = new Sequence("aAa");
156
157        s.ReplaceAt(0, 3, t);
158        Assert.AreEqual(1, s.FirstNonTerminalIndex);
159        Assert.AreEqual('A', s.FirstNonTerminal);
160        Assert.AreEqual("aAaB", s.ToString());
161      }
162      {
163        var s = new Sequence("aaaA");
164        var t = new Sequence("aaa");
165
166        s.ReplaceAt(3, 1, t);
167        Assert.AreEqual(-1, s.FirstNonTerminalIndex);
168        Assert.AreEqual("aaaaaa", s.ToString());
169      }
170      {
171        var s = new Sequence("aaaA");
172        var t = new Sequence("aaa");
173
174        s.ReplaceAt(1, 3, t);
175        Assert.AreEqual(-1, s.FirstNonTerminalIndex);
176        Assert.AreEqual("aaaa", s.ToString());
177      }
178      {
179        var s = new Sequence("aaaA");
180        var t = new Sequence("aaa");
181
182        s.ReplaceAt(0, 4, t);
183        Assert.AreEqual(-1, s.FirstNonTerminalIndex);
184        Assert.AreEqual("aaa", s.ToString());
185      }
186      {
187        var s = new Sequence("aaaA");
188        var t = new Sequence("aAaAA");
189
190        s.ReplaceAt(0, 4, t);
191        Assert.AreEqual(1, s.FirstNonTerminalIndex);
192        Assert.AreEqual("aAaAA", s.ToString());
193      }
194
195      // testing length checks
196      {
197        var s = new Sequence("aA");
198        var t = new Sequence("aA");
199
200        try {
201          s.ReplaceAt(0, 4, t);
202          Assert.Fail();
203        }
204        catch (ArgumentException) { }
205
206        s.ReplaceAt(0, 2, t); // should work
207
208        try {
209          s.ReplaceAt(0, 3, t);
210          Assert.Fail();
211        }
212        catch (ArgumentException) { }
213
214        try {
215          s.ReplaceAt(1, 2, t);
216          Assert.Fail();
217        }
218        catch (ArgumentException) { }
219
220        s.ReplaceAt(1, 1, new Sequence("A")); // should work
221
222        try {
223          s.ReplaceAt(-1, 2, t);
224          Assert.Fail();
225        }
226        catch (ArgumentException) { }
227
228      }
229    }
230
231    [TestMethod]
232    public void TestSubsequence() {
233      CultureInfo.DefaultThreadCurrentCulture = CultureInfo.InvariantCulture;
234      {
235        var s = new Sequence("AAaaaAA");
236        var sub = s.Subsequence(0, 7);
237
238        Assert.AreEqual(0, sub.FirstNonTerminalIndex);
239        Assert.AreEqual("AAaaaAA", sub.ToString());
240      }
241      {
242        var s = new Sequence("AAaaaAA");
243        var sub = s.Subsequence(0, 3);
244
245        Assert.AreEqual(0, sub.FirstNonTerminalIndex);
246        Assert.AreEqual("AAa", sub.ToString());
247      }
248      {
249        var s = new Sequence("AAaaaAA");
250        var sub = s.Subsequence(2, 3);
251
252        Assert.AreEqual(-1, sub.FirstNonTerminalIndex);
253        Assert.AreEqual("aaa", sub.ToString());
254      }
255      {
256        var s = new Sequence("AAaaaAA");
257        var sub = s.Subsequence(2, 4);
258
259        Assert.AreEqual(3, sub.FirstNonTerminalIndex);
260        Assert.AreEqual("aaaA", sub.ToString());
261      }
262      {
263        var s = new Sequence("AAaaaAA");
264        var sub = s.Subsequence(5, 2);
265
266        Assert.AreEqual(0, sub.FirstNonTerminalIndex);
267        Assert.AreEqual("AA", sub.ToString());
268      }
269    }
270  }
271}
Note: See TracBrowser for help on using the repository browser.