]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - tests/org.simantics.scl.compiler.tests/src/org/simantics/scl/compiler/tests/unit/TestNamespaceFilter.java
Automatic execution of SCL tests in Maven
[simantics/platform.git] / tests / org.simantics.scl.compiler.tests / src / org / simantics / scl / compiler / tests / unit / TestNamespaceFilter.java
diff --git a/tests/org.simantics.scl.compiler.tests/src/org/simantics/scl/compiler/tests/unit/TestNamespaceFilter.java b/tests/org.simantics.scl.compiler.tests/src/org/simantics/scl/compiler/tests/unit/TestNamespaceFilter.java
new file mode 100644 (file)
index 0000000..fa3bd9f
--- /dev/null
@@ -0,0 +1,89 @@
+package org.simantics.scl.compiler.tests.unit;\r
+\r
+import java.util.Collection;\r
+\r
+import org.junit.Test;\r
+import org.simantics.scl.compiler.environment.filter.AcceptAllNamespaceFilter;\r
+import org.simantics.scl.compiler.environment.filter.NamespaceFilter;\r
+import org.simantics.scl.compiler.environment.filter.NamespaceFilters;\r
+import org.simantics.scl.compiler.environment.filter.NegativeNamespaceFilter;\r
+import org.simantics.scl.compiler.environment.filter.PositiveNamespaceFilter;\r
+\r
+import gnu.trove.set.hash.THashSet;\r
+import junit.framework.Assert;\r
+\r
+public class TestNamespaceFilter {\r
+    \r
+    private void testBooleanOperations(Collection<String> all, NamespaceFilter a, NamespaceFilter b) {\r
+        {\r
+            NamespaceFilter c = NamespaceFilters.union(a, b);\r
+            //System.out.println("union(" + a + ", " + b + ") = " + c);\r
+            for(String name : all)\r
+                Assert.assertEquals(\r
+                        a.isValueIncluded(name) || b.isValueIncluded(name),\r
+                        c.isValueIncluded(name));\r
+        }\r
+        {\r
+            NamespaceFilter c = NamespaceFilters.intersection(a, b);\r
+            //System.out.println("intersection(" + a + ", " + b + ") = " + c);\r
+            for(String name : all)\r
+                Assert.assertEquals(\r
+                        a.isValueIncluded(name) && b.isValueIncluded(name),\r
+                        c.isValueIncluded(name));\r
+        }\r
+    }\r
+\r
+    private void testBooleanOperations(THashSet<String> a, THashSet<String> b) {\r
+        THashSet<String> all = new THashSet<String>();\r
+        all.addAll(a);\r
+        all.addAll(b);\r
+        all.add("dummy");\r
+        \r
+        PositiveNamespaceFilter pa = new PositiveNamespaceFilter(a);\r
+        NegativeNamespaceFilter na = new NegativeNamespaceFilter(a);\r
+        PositiveNamespaceFilter pb = new PositiveNamespaceFilter(b);\r
+        NegativeNamespaceFilter nb = new NegativeNamespaceFilter(b);\r
+        testBooleanOperations(all, pa, pb);\r
+        testBooleanOperations(all, na, pb);\r
+        testBooleanOperations(all, pa, nb);\r
+        testBooleanOperations(all, na, nb);\r
+    }\r
+    \r
+    private void testBooleanOperations(THashSet<String> a) {\r
+        THashSet<String> all = new THashSet<String>();\r
+        all.addAll(a);\r
+        all.add("dummy");\r
+        \r
+        PositiveNamespaceFilter pa = new PositiveNamespaceFilter(a);\r
+        NegativeNamespaceFilter na = new NegativeNamespaceFilter(a);\r
+        testBooleanOperations(all, pa, AcceptAllNamespaceFilter.INSTANCE);\r
+        testBooleanOperations(all, na, AcceptAllNamespaceFilter.INSTANCE);\r
+        testBooleanOperations(all, AcceptAllNamespaceFilter.INSTANCE, pa);\r
+        testBooleanOperations(all, AcceptAllNamespaceFilter.INSTANCE, na);\r
+        testBooleanOperations(all, AcceptAllNamespaceFilter.INSTANCE, AcceptAllNamespaceFilter.INSTANCE);\r
+    }\r
+    \r
+    @Test\r
+    public void testBooleanOperations() {\r
+        for(int p=0;p<8;++p) {\r
+            THashSet<String> a = new THashSet<String>();\r
+            for(int i=0;i<3;++i)\r
+                if(((p >> i) & 1) == 1)\r
+                    a.add(String.valueOf(i));\r
+            testBooleanOperations(a);\r
+        }\r
+        \r
+        for(int p=0;p<64;++p) {\r
+            THashSet<String> a = new THashSet<String>();\r
+            THashSet<String> b = new THashSet<String>();\r
+            for(int i=0;i<3;++i) {\r
+                if(((p >> i) & 1) == 1)\r
+                    a.add(String.valueOf(i));\r
+                if(((p >> (i+3)) & 1) == 1)\r
+                    b.add(String.valueOf(i));\r
+            }\r
+            testBooleanOperations(a, b);\r
+        }\r
+    }\r
+    \r
+}\r