mirror of
https://github.com/marcin-szczepanski/jFuzzyLogic.git
synced 2024-08-16 18:06:57 +02:00
388 lines
14 KiB
Java
388 lines
14 KiB
Java
/*
|
|
[The "BSD licence"]
|
|
Copyright (c) 2005-2007 Terence Parr
|
|
All rights reserved.
|
|
|
|
Redistribution and use in source and binary forms, with or without
|
|
modification, are permitted provided that the following conditions
|
|
are met:
|
|
1. Redistributions of source code must retain the above copyright
|
|
notice, this list of conditions and the following disclaimer.
|
|
2. Redistributions in binary form must reproduce the above copyright
|
|
notice, this list of conditions and the following disclaimer in the
|
|
documentation and/or other materials provided with the distribution.
|
|
3. The name of the author may not be used to endorse or promote products
|
|
derived from this software without specific prior written permission.
|
|
|
|
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
package org.antlr.test;
|
|
|
|
import org.antlr.runtime.tree.*;
|
|
|
|
import java.util.Map;
|
|
import java.util.List;
|
|
import java.util.ArrayList;
|
|
import java.util.HashMap;
|
|
|
|
public class TestTreeWizard extends BaseTest {
|
|
protected static final String[] tokens =
|
|
new String[] {"", "", "", "", "", "A", "B", "C", "D", "E", "ID", "VAR"};
|
|
protected static final TreeAdaptor adaptor = new CommonTreeAdaptor();
|
|
|
|
public void testSingleNode() throws Exception {
|
|
TreeWizard wiz = new TreeWizard(adaptor, tokens);
|
|
CommonTree t = (CommonTree)wiz.create("ID");
|
|
String found = t.toStringTree();
|
|
String expecting = "ID";
|
|
assertEquals(expecting, found);
|
|
}
|
|
|
|
public void testSingleNodeWithArg() throws Exception {
|
|
TreeWizard wiz = new TreeWizard(adaptor, tokens);
|
|
CommonTree t = (CommonTree)wiz.create("ID[foo]");
|
|
String found = t.toStringTree();
|
|
String expecting = "foo";
|
|
assertEquals(expecting, found);
|
|
}
|
|
|
|
public void testSingleNodeTree() throws Exception {
|
|
TreeWizard wiz = new TreeWizard(adaptor, tokens);
|
|
CommonTree t = (CommonTree)wiz.create("(A)");
|
|
String found = t.toStringTree();
|
|
String expecting = "A";
|
|
assertEquals(expecting, found);
|
|
}
|
|
|
|
public void testSingleLevelTree() throws Exception {
|
|
TreeWizard wiz = new TreeWizard(adaptor, tokens);
|
|
CommonTree t = (CommonTree)wiz.create("(A B C D)");
|
|
String found = t.toStringTree();
|
|
String expecting = "(A B C D)";
|
|
assertEquals(expecting, found);
|
|
}
|
|
|
|
public void testListTree() throws Exception {
|
|
TreeWizard wiz = new TreeWizard(adaptor, tokens);
|
|
CommonTree t = (CommonTree)wiz.create("(nil A B C)");
|
|
String found = t.toStringTree();
|
|
String expecting = "A B C";
|
|
assertEquals(expecting, found);
|
|
}
|
|
|
|
public void testInvalidListTree() throws Exception {
|
|
TreeWizard wiz = new TreeWizard(adaptor, tokens);
|
|
CommonTree t = (CommonTree)wiz.create("A B C");
|
|
assertTrue(t==null);
|
|
}
|
|
|
|
public void testDoubleLevelTree() throws Exception {
|
|
TreeWizard wiz = new TreeWizard(adaptor, tokens);
|
|
CommonTree t = (CommonTree)wiz.create("(A (B C) (B D) E)");
|
|
String found = t.toStringTree();
|
|
String expecting = "(A (B C) (B D) E)";
|
|
assertEquals(expecting, found);
|
|
}
|
|
|
|
public void testSingleNodeIndex() throws Exception {
|
|
TreeWizard wiz = new TreeWizard(adaptor, tokens);
|
|
CommonTree t = (CommonTree)wiz.create("ID");
|
|
Map m = wiz.index(t);
|
|
String found = m.toString();
|
|
String expecting = "{10=[ID]}";
|
|
assertEquals(expecting, found);
|
|
}
|
|
|
|
public void testNoRepeatsIndex() throws Exception {
|
|
TreeWizard wiz = new TreeWizard(adaptor, tokens);
|
|
CommonTree t = (CommonTree)wiz.create("(A B C D)");
|
|
Map m = wiz.index(t);
|
|
String found = m.toString();
|
|
String expecting = "{8=[D], 6=[B], 7=[C], 5=[A]}";
|
|
assertEquals(expecting, found);
|
|
}
|
|
|
|
public void testRepeatsIndex() throws Exception {
|
|
TreeWizard wiz = new TreeWizard(adaptor, tokens);
|
|
CommonTree t = (CommonTree)wiz.create("(A B (A C B) B D D)");
|
|
Map m = wiz.index(t);
|
|
String found = m.toString();
|
|
String expecting = "{8=[D, D], 6=[B, B, B], 7=[C], 5=[A, A]}";
|
|
assertEquals(expecting, found);
|
|
}
|
|
|
|
public void testNoRepeatsVisit() throws Exception {
|
|
TreeWizard wiz = new TreeWizard(adaptor, tokens);
|
|
CommonTree t = (CommonTree)wiz.create("(A B C D)");
|
|
final List elements = new ArrayList();
|
|
wiz.visit(t, wiz.getTokenType("B"), new TreeWizard.Visitor() {
|
|
public void visit(Object t) {
|
|
elements.add(t);
|
|
}
|
|
});
|
|
String found = elements.toString();
|
|
String expecting = "[B]";
|
|
assertEquals(expecting, found);
|
|
}
|
|
|
|
public void testNoRepeatsVisit2() throws Exception {
|
|
TreeWizard wiz = new TreeWizard(adaptor, tokens);
|
|
CommonTree t = (CommonTree)wiz.create("(A B (A C B) B D D)");
|
|
final List elements = new ArrayList();
|
|
wiz.visit(t, wiz.getTokenType("C"),
|
|
new TreeWizard.Visitor() {
|
|
public void visit(Object t) {
|
|
elements.add(t);
|
|
}
|
|
});
|
|
String found = elements.toString();
|
|
String expecting = "[C]";
|
|
assertEquals(expecting, found);
|
|
}
|
|
|
|
public void testRepeatsVisit() throws Exception {
|
|
TreeWizard wiz = new TreeWizard(adaptor, tokens);
|
|
CommonTree t = (CommonTree)wiz.create("(A B (A C B) B D D)");
|
|
final List elements = new ArrayList();
|
|
wiz.visit(t, wiz.getTokenType("B"),
|
|
new TreeWizard.Visitor() {
|
|
public void visit(Object t) {
|
|
elements.add(t);
|
|
}
|
|
});
|
|
String found = elements.toString();
|
|
String expecting = "[B, B, B]";
|
|
assertEquals(expecting, found);
|
|
}
|
|
|
|
public void testRepeatsVisit2() throws Exception {
|
|
TreeWizard wiz = new TreeWizard(adaptor, tokens);
|
|
CommonTree t = (CommonTree)wiz.create("(A B (A C B) B D D)");
|
|
final List elements = new ArrayList();
|
|
wiz.visit(t, wiz.getTokenType("A"),
|
|
new TreeWizard.Visitor() {
|
|
public void visit(Object t) {
|
|
elements.add(t);
|
|
}
|
|
});
|
|
String found = elements.toString();
|
|
String expecting = "[A, A]";
|
|
assertEquals(expecting, found);
|
|
}
|
|
|
|
public void testRepeatsVisitWithContext() throws Exception {
|
|
TreeWizard wiz = new TreeWizard(adaptor, tokens);
|
|
CommonTree t = (CommonTree)wiz.create("(A B (A C B) B D D)");
|
|
final List elements = new ArrayList();
|
|
wiz.visit(t, wiz.getTokenType("B"),
|
|
new TreeWizard.ContextVisitor() {
|
|
public void visit(Object t, Object parent, int childIndex, Map labels) {
|
|
elements.add(adaptor.getText(t)+"@"+
|
|
(parent!=null?adaptor.getText(parent):"nil")+
|
|
"["+childIndex+"]");
|
|
}
|
|
});
|
|
String found = elements.toString();
|
|
String expecting = "[B@A[0], B@A[1], B@A[2]]";
|
|
assertEquals(expecting, found);
|
|
}
|
|
|
|
public void testRepeatsVisitWithNullParentAndContext() throws Exception {
|
|
TreeWizard wiz = new TreeWizard(adaptor, tokens);
|
|
CommonTree t = (CommonTree)wiz.create("(A B (A C B) B D D)");
|
|
final List elements = new ArrayList();
|
|
wiz.visit(t, wiz.getTokenType("A"),
|
|
new TreeWizard.ContextVisitor() {
|
|
public void visit(Object t, Object parent, int childIndex, Map labels) {
|
|
elements.add(adaptor.getText(t)+"@"+
|
|
(parent!=null?adaptor.getText(parent):"nil")+
|
|
"["+childIndex+"]");
|
|
}
|
|
});
|
|
String found = elements.toString();
|
|
String expecting = "[A@nil[0], A@A[1]]";
|
|
assertEquals(expecting, found);
|
|
}
|
|
|
|
public void testVisitPattern() throws Exception {
|
|
TreeWizard wiz = new TreeWizard(adaptor, tokens);
|
|
CommonTree t = (CommonTree)wiz.create("(A B C (A B) D)");
|
|
final List elements = new ArrayList();
|
|
wiz.visit(t, "(A B)",
|
|
new TreeWizard.Visitor() {
|
|
public void visit(Object t) {
|
|
elements.add(t);
|
|
}
|
|
});
|
|
String found = elements.toString();
|
|
String expecting = "[A]"; // shouldn't match overall root, just (A B)
|
|
assertEquals(expecting, found);
|
|
}
|
|
|
|
public void testVisitPatternMultiple() throws Exception {
|
|
TreeWizard wiz = new TreeWizard(adaptor, tokens);
|
|
CommonTree t = (CommonTree)wiz.create("(A B C (A B) (D (A B)))");
|
|
final List elements = new ArrayList();
|
|
wiz.visit(t, "(A B)",
|
|
new TreeWizard.ContextVisitor() {
|
|
public void visit(Object t, Object parent, int childIndex, Map labels) {
|
|
elements.add(adaptor.getText(t)+"@"+
|
|
(parent!=null?adaptor.getText(parent):"nil")+
|
|
"["+childIndex+"]");
|
|
}
|
|
});
|
|
String found = elements.toString();
|
|
String expecting = "[A@A[2], A@D[0]]"; // shouldn't match overall root, just (A B)
|
|
assertEquals(expecting, found);
|
|
}
|
|
|
|
public void testVisitPatternMultipleWithLabels() throws Exception {
|
|
TreeWizard wiz = new TreeWizard(adaptor, tokens);
|
|
CommonTree t = (CommonTree)wiz.create("(A B C (A[foo] B[bar]) (D (A[big] B[dog])))");
|
|
final List elements = new ArrayList();
|
|
wiz.visit(t, "(%a:A %b:B)",
|
|
new TreeWizard.ContextVisitor() {
|
|
public void visit(Object t, Object parent, int childIndex, Map labels) {
|
|
elements.add(adaptor.getText(t)+"@"+
|
|
(parent!=null?adaptor.getText(parent):"nil")+
|
|
"["+childIndex+"]"+labels.get("a")+"&"+labels.get("b"));
|
|
}
|
|
});
|
|
String found = elements.toString();
|
|
String expecting = "[foo@A[2]foo&bar, big@D[0]big&dog]";
|
|
assertEquals(expecting, found);
|
|
}
|
|
|
|
public void testParse() throws Exception {
|
|
TreeWizard wiz = new TreeWizard(adaptor, tokens);
|
|
CommonTree t = (CommonTree)wiz.create("(A B C)");
|
|
boolean valid = wiz.parse(t, "(A B C)");
|
|
assertTrue(valid);
|
|
}
|
|
|
|
public void testParseSingleNode() throws Exception {
|
|
TreeWizard wiz = new TreeWizard(adaptor, tokens);
|
|
CommonTree t = (CommonTree)wiz.create("A");
|
|
boolean valid = wiz.parse(t, "A");
|
|
assertTrue(valid);
|
|
}
|
|
|
|
public void testParseFlatTree() throws Exception {
|
|
TreeWizard wiz = new TreeWizard(adaptor, tokens);
|
|
CommonTree t = (CommonTree)wiz.create("(nil A B C)");
|
|
boolean valid = wiz.parse(t, "(nil A B C)");
|
|
assertTrue(valid);
|
|
}
|
|
|
|
public void testWildcard() throws Exception {
|
|
TreeWizard wiz = new TreeWizard(adaptor, tokens);
|
|
CommonTree t = (CommonTree)wiz.create("(A B C)");
|
|
boolean valid = wiz.parse(t, "(A . .)");
|
|
assertTrue(valid);
|
|
}
|
|
|
|
public void testParseWithText() throws Exception {
|
|
TreeWizard wiz = new TreeWizard(adaptor, tokens);
|
|
CommonTree t = (CommonTree)wiz.create("(A B[foo] C[bar])");
|
|
// C pattern has no text arg so despite [bar] in t, no need
|
|
// to match text--check structure only.
|
|
boolean valid = wiz.parse(t, "(A B[foo] C)");
|
|
assertTrue(valid);
|
|
}
|
|
|
|
public void testParseWithTextFails() throws Exception {
|
|
TreeWizard wiz = new TreeWizard(adaptor, tokens);
|
|
CommonTree t = (CommonTree)wiz.create("(A B C)");
|
|
boolean valid = wiz.parse(t, "(A[foo] B C)");
|
|
assertTrue(!valid); // fails
|
|
}
|
|
|
|
public void testParseLabels() throws Exception {
|
|
TreeWizard wiz = new TreeWizard(adaptor, tokens);
|
|
CommonTree t = (CommonTree)wiz.create("(A B C)");
|
|
Map labels = new HashMap();
|
|
boolean valid = wiz.parse(t, "(%a:A %b:B %c:C)", labels);
|
|
assertTrue(valid);
|
|
assertEquals("A", labels.get("a").toString());
|
|
assertEquals("B", labels.get("b").toString());
|
|
assertEquals("C", labels.get("c").toString());
|
|
}
|
|
|
|
public void testParseWithWildcardLabels() throws Exception {
|
|
TreeWizard wiz = new TreeWizard(adaptor, tokens);
|
|
CommonTree t = (CommonTree)wiz.create("(A B C)");
|
|
Map labels = new HashMap();
|
|
boolean valid = wiz.parse(t, "(A %b:. %c:.)", labels);
|
|
assertTrue(valid);
|
|
assertEquals("B", labels.get("b").toString());
|
|
assertEquals("C", labels.get("c").toString());
|
|
}
|
|
|
|
public void testParseLabelsAndTestText() throws Exception {
|
|
TreeWizard wiz = new TreeWizard(adaptor, tokens);
|
|
CommonTree t = (CommonTree)wiz.create("(A B[foo] C)");
|
|
Map labels = new HashMap();
|
|
boolean valid = wiz.parse(t, "(%a:A %b:B[foo] %c:C)", labels);
|
|
assertTrue(valid);
|
|
assertEquals("A", labels.get("a").toString());
|
|
assertEquals("foo", labels.get("b").toString());
|
|
assertEquals("C", labels.get("c").toString());
|
|
}
|
|
|
|
public void testParseLabelsInNestedTree() throws Exception {
|
|
TreeWizard wiz = new TreeWizard(adaptor, tokens);
|
|
CommonTree t = (CommonTree)wiz.create("(A (B C) (D E))");
|
|
Map labels = new HashMap();
|
|
boolean valid = wiz.parse(t, "(%a:A (%b:B %c:C) (%d:D %e:E) )", labels);
|
|
assertTrue(valid);
|
|
assertEquals("A", labels.get("a").toString());
|
|
assertEquals("B", labels.get("b").toString());
|
|
assertEquals("C", labels.get("c").toString());
|
|
assertEquals("D", labels.get("d").toString());
|
|
assertEquals("E", labels.get("e").toString());
|
|
}
|
|
|
|
public void testEquals() throws Exception {
|
|
TreeWizard wiz = new TreeWizard(adaptor, tokens);
|
|
CommonTree t1 = (CommonTree)wiz.create("(A B C)");
|
|
CommonTree t2 = (CommonTree)wiz.create("(A B C)");
|
|
boolean same = TreeWizard.equals(t1, t2, adaptor);
|
|
assertTrue(same);
|
|
}
|
|
|
|
public void testEqualsWithText() throws Exception {
|
|
TreeWizard wiz = new TreeWizard(adaptor, tokens);
|
|
CommonTree t1 = (CommonTree)wiz.create("(A B[foo] C)");
|
|
CommonTree t2 = (CommonTree)wiz.create("(A B[foo] C)");
|
|
boolean same = TreeWizard.equals(t1, t2, adaptor);
|
|
assertTrue(same);
|
|
}
|
|
|
|
public void testEqualsWithMismatchedText() throws Exception {
|
|
TreeWizard wiz = new TreeWizard(adaptor, tokens);
|
|
CommonTree t1 = (CommonTree)wiz.create("(A B[foo] C)");
|
|
CommonTree t2 = (CommonTree)wiz.create("(A B C)");
|
|
boolean same = TreeWizard.equals(t1, t2, adaptor);
|
|
assertTrue(!same);
|
|
}
|
|
|
|
public void testFindPattern() throws Exception {
|
|
TreeWizard wiz = new TreeWizard(adaptor, tokens);
|
|
CommonTree t = (CommonTree)wiz.create("(A B C (A[foo] B[bar]) (D (A[big] B[dog])))");
|
|
final List subtrees = wiz.find(t, "(A B)");
|
|
List elements = subtrees;
|
|
String found = elements.toString();
|
|
String expecting = "[foo, big]";
|
|
assertEquals(expecting, found);
|
|
}
|
|
|
|
} |