--- /dev/null
+package org.simantics.scl.compiler.tests.unit;\r
+\r
+import gnu.trove.set.hash.THashSet;\r
+\r
+import java.util.Collection;\r
+\r
+import junit.framework.Assert;\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
+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