[procilege commit] r79 - in trunk/procilege/src: main/java/merisis/traitspace/impl main/java/procilege/compute main/...

1 view
Skip to first unread message

codesite...@google.com

unread,
Jun 16, 2007, 3:21:40 AM6/16/07
to procil...@googlegroups.com
Author: lcgong
Date: Sat Jun 16 00:20:26 2007
New Revision: 79

Modified:
trunk/procilege/src/main/java/merisis/traitspace/impl/SketchImpl.java
trunk/procilege/src/main/java/procilege/compute/ExprExpandTraveller.java
trunk/procilege/src/main/java/procilege/compute/Traveller.java
trunk/procilege/src/main/java/procilege/impl/PrivFormAnalysisImpl.java
trunk/procilege/src/main/java/procilege/impl/expand/ExprExpandImpl.java
trunk/procilege/src/main/java/procilege/impl/expand/ExprExpandTravellerImpl.java
trunk/procilege/src/main/java/procilege/impl/expand/ExprSubstituteExpandPlace.java
trunk/procilege/src/main/java/procilege/impl/expand/NameExpandPlace.java
trunk/procilege/src/main/java/procilege/impl/expand/PrivExprCompositionExpandPlace.java
trunk/procilege/src/main/java/procilege/impl/expand/PrivExprMergenceExpandPlace.java
trunk/procilege/src/main/java/procilege/impl/formatter/PrivExprMergenceFormatter.java
trunk/procilege/src/main/java/procilege/lang/ExprSubstitute.java
trunk/procilege/src/main/java/procilege/lang/PrivExprElement.java
trunk/procilege/src/main/java/procilege/lang/PrivExprMergence.java
trunk/procilege/src/main/java/procilege/lang/PrivilegeFormAnalysis.java
trunk/procilege/src/test/java/procilege/test/pal/AbstractPalTest.java
trunk/procilege/src/test/java/procilege/test/pal/ComputationalEntityMgrTest1.java
trunk/procilege/src/test/java/procilege/test/pal/EntityEquivTest1.java
trunk/procilege/src/test/java/procilege/test/pal/ExprExpandTest.java
trunk/procilege/src/test/java/procilege/test/pal/NormalFormTest.java
trunk/procilege/src/test/java/procilege/test/pal/PrivExprSubstitutionNormTest.java
trunk/procilege/src/test/java/procilege/test/pal/RecursivePrivilegeTest.java

Log:
[Issue 34]Fixed the recursive definition of privilege.

Modified: trunk/procilege/src/main/java/merisis/traitspace/impl/SketchImpl.java
==============================================================================
--- trunk/procilege/src/main/java/merisis/traitspace/impl/SketchImpl.java (original)
+++ trunk/procilege/src/main/java/merisis/traitspace/impl/SketchImpl.java Sat Jun 16 00:20:26 2007
@@ -454,8 +454,6 @@
if (traits.get(point))
continue;

- logger.info("point: " + point);
-
OpenBitSet footprints = footprintsMap.get(point);
if (footprints == null) {
OpenBitSet s = new OpenBitSet();

Modified: trunk/procilege/src/main/java/procilege/compute/ExprExpandTraveller.java
==============================================================================
--- trunk/procilege/src/main/java/procilege/compute/ExprExpandTraveller.java (original)
+++ trunk/procilege/src/main/java/procilege/compute/ExprExpandTraveller.java Sat Jun 16 00:20:26 2007
@@ -1,11 +1,13 @@
package procilege.compute;

-import java.util.Iterator;
+import java.util.Collection;
+
+import org.apache.solr.util.OpenBitSet;

import procilege.lang.ExprElement;
-import procilege.lang.Name;
import procilege.lang.PrivExprComposition;
import procilege.lang.PrivExprElement;
+import procilege.lang.PrivExprMergence;

public interface ExprExpandTraveller extends Traveller {

@@ -33,24 +35,20 @@
*/
ExprElement getNeighbor();

- void reportFreeName(Name name);
-
- void reportBoundName(Name name);
-
- Iterator<Name> freeNameIterator();
+ void apply(long name, Collection<PrivExprMergence> expr);

- void apply(Name name, ExprElement expr);
-
- ExprElement getApplication(Name name);
+ Collection<PrivExprMergence> getApplication(long name);

/**
* The bearer of the expression to expand.
*/
- Name getBearerName();
-
- boolean isRecursiveBorne(Name name);
+ OpenBitSet getBoundNames();
+
+ void boundname(long name);
+
+ ExprExpandTraveller spawn(OpenBitSet boundnames);

- ExprExpandTraveller spawn(Name bearer);
+ ExprExpandTraveller spawn(long boundname);

ExprExpandTraveller spawn(Class<?>[] limitation);

Modified: trunk/procilege/src/main/java/procilege/compute/Traveller.java
==============================================================================
--- trunk/procilege/src/main/java/procilege/compute/Traveller.java (original)
+++ trunk/procilege/src/main/java/procilege/compute/Traveller.java Sat Jun 16 00:20:26 2007
@@ -1,7 +1,7 @@
package procilege.compute;

+
public interface Traveller {

Object setout(Object place);
-
}

Modified: trunk/procilege/src/main/java/procilege/impl/PrivFormAnalysisImpl.java
==============================================================================
--- trunk/procilege/src/main/java/procilege/impl/PrivFormAnalysisImpl.java (original)
+++ trunk/procilege/src/main/java/procilege/impl/PrivFormAnalysisImpl.java Sat Jun 16 00:20:26 2007
@@ -291,7 +291,7 @@
pf.isDirty = false;
}

- private PrivilegeFormTerm[] toTerms(PrivExprComposition pvs) {
+ private PrivilegeFormTerm[] toTerms(Collection<PrivExprMergence> pvs) {

Collection<PrivilegeFormTerm> result = new HashSet<PrivilegeFormTerm>();

@@ -330,10 +330,11 @@
pft.mergePrivExpr((PrivExprElement) p);
}

- Iterator<Name> oitr = pm.originsIterator();
- while (oitr.hasNext()) {
- pft.addOrigin(oitr.next());
- }
+ //TODO : bound names
+ //Iterator<Name> oitr = pm.originsIterator();
+// while (oitr.hasNext()) {
+// pft.addOrigin(oitr.next());
+// }
} else if (pe instanceof Name) {
pft.mergePrivExpr((Name) pe);

@@ -359,94 +360,78 @@
return cem.retrievePrivlegeForm(name);
}

- public PrivExprComposition normlize(Name name) {
+ public Collection<PrivExprMergence> normlize(Name name) {

- return _normlize(expand.traveller(name), name);
+ return _normlize(expand.traveller(name), ((NameImpl) name).nameId);
}

- public PrivExprComposition normlize(PrivilegeForm form) {
+ public Collection<PrivExprMergence> normlize(PrivilegeForm form) {

- return _normlize(expand.traveller(null), form);
+ return _normlize(expand.traveller(null),
+ ((PrivilegeFormImpl) form).expr);
}

- private PrivExprComposition _normlize(ExprExpandTraveller tr, Name name) {
+ private Collection<PrivExprMergence> _normlize(ExprExpandTraveller tr,
+ long name) {

- PrivilegeForm pf = privform(name);
+ PrivilegeFormImpl pf = (PrivilegeFormImpl) privform(new NameImpl(name));
if (pf == null)
return null;
-
- return _normlize(tr, pf);
- }
-
- private PrivExprComposition _normlize(ExprExpandTraveller tr,
- PrivilegeForm form) {
-
- PrivilegeFormImpl pf = (PrivilegeFormImpl) form;
-
- expandAndApply(tr, pf);
-
- return pf.expandedExpr;
+
+ logger.info("name: " + name +", " + pf.expr);
+
+ return _normlize(tr.spawn(name), pf.expr);
}

- private void expandAndApply(ExprExpandTraveller tr, PrivilegeFormImpl pf) {
+ public Collection<PrivExprMergence> _normlize(ExprExpandTraveller tr,
+ PrivExprElement expr) {

- PrivExprElement expr = pf.expr;
if (expr == null)
- throw new IllegalStateException("expr is null");
-
- ExprExpandTraveller tr1, tr2;
+ return null;

- tr1 = tr.spawn(pf.name);
- while (true) {
- boolean applicable = false;
- if (logger.isLoggable(Level.FINEST))
- logger.finest("expanding<<: " + ftr.toString(expr));
- expr = tr1.expandPrivExpr(expr);
- if (((PrivExprComposition) expr).size() == 0)
- throw new RuntimeException();
+ ArrayList<PrivExprMergence> list = new ArrayList<PrivExprMergence>();

- if (logger.isLoggable(Level.FINEST)) {
- logger.finest("expanding>>: " + ftr.toString(expr));
+ PrivExprComposition expanded;
+ expanded = (PrivExprComposition) tr.expandPrivExpr(expr);
+ for (PrivExprElement exp : expanded.getTerms()) {
+
+ PrivExprMergence m = (PrivExprMergence) exp;
+
+ ExprExpandTraveller subtr;
+ subtr = tr.spawn(m.getBoundNames());
+ OpenBitSet fn = m.getFreeNames();
+ if (fn.isEmpty()) {
+ list.add(m);
+ continue;
}

- tr2 = tr1.spawn(pf.name);
- Iterator<Name> nameItr = tr1.freeNameIterator();
- while (nameItr.hasNext()) {
- Name n = nameItr.next();
-
- PrivExprElement nf = _normlize(tr, n);
- if (nf == null)
- continue;
-
- tr2.apply(n, nf);
-
- if (logger.isLoggable(Level.FINEST)) {
- logger.finest("apply, " + ftr.toString(n) + " := "
- + ftr.toString(nf));
- }
-
- if (!applicable)
- applicable = true;
+ for (long n = fn.nextSetBit(0); n >= 0; n = fn.nextSetBit(n + 1)) {
+
+ Collection<PrivExprMergence> nexp = _normlize(subtr, n);
+ if (nexp == null)
+ subtr.boundname(n);
+ else
+ subtr.apply(n, nexp);
}
-
- if (!applicable)
- break;
-
- tr1 = tr2;
+ list.addAll(_normlize(subtr, m));
}

- if (expr != null)
- pf.expandedExpr = (PrivExprComposition) expr;
-
if (logger.isLoggable(Level.FINEST)) {
StringBuilder sb = new StringBuilder();
- sb.append("\n Name: ");
- ftr.format(sb, pf.name);
- sb.append("\n Expr: ");
- ftr.format(sb, pf.expr);
- sb.append("\nExpanded: ");
- ftr.format(sb, pf.expandedExpr);
+ sb.append("normalized, bound names: {");
+ BitUtil.format(sb, tr.getBoundNames(), ",");
+ sb.append("}\n");
+ int i = 0;
+ for (PrivExprMergence term : list) {
+ sb.append(String.format("%04d: '", i++));
+ ftr.format(sb, term);
+ sb.append("', fn:{");
+ BitUtil.format(sb, term.getFreeNames(), ",");
+ sb.append("}\n");
+ }
logger.finest(sb.toString());
}
+
+ return list;
}
}

Modified: trunk/procilege/src/main/java/procilege/impl/expand/ExprExpandImpl.java
==============================================================================
--- trunk/procilege/src/main/java/procilege/impl/expand/ExprExpandImpl.java (original)
+++ trunk/procilege/src/main/java/procilege/impl/expand/ExprExpandImpl.java Sat Jun 16 00:20:26 2007
@@ -3,11 +3,14 @@
import java.util.HashMap;
import java.util.Map;

+import org.apache.solr.util.OpenBitSet;
+
import procilege.compute.ExprExpand;
import procilege.compute.ExprExpandTraveller;
import procilege.compute.PlaceTypeMetadata;
import procilege.compute.PlaceType;
import procilege.compute.TravelMap;
+import procilege.impl.NameImpl;
import procilege.lang.CompositeExpr;
import procilege.lang.ExprElement;
import procilege.lang.Name;
@@ -38,10 +41,13 @@
return null;
}

- public ExprExpandTraveller traveller(Name bearer) {
+ public ExprExpandTraveller traveller(Name boundname) {
+
+ OpenBitSet bn = new OpenBitSet();
+ if (boundname != null)
+ bn.set(((NameImpl) boundname).nameId);

- ExprExpandTravellerImpl tr = new ExprExpandTravellerImpl(this,
- bearer);
+ ExprExpandTravellerImpl tr = new ExprExpandTravellerImpl(this, bn);
injector.injectMembers(tr);

return tr;

Modified: trunk/procilege/src/main/java/procilege/impl/expand/ExprExpandTravellerImpl.java
==============================================================================
--- trunk/procilege/src/main/java/procilege/impl/expand/ExprExpandTravellerImpl.java (original)
+++ trunk/procilege/src/main/java/procilege/impl/expand/ExprExpandTravellerImpl.java Sat Jun 16 00:20:26 2007
@@ -6,9 +6,7 @@
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.Stack;
-import java.util.logging.Level;
import java.util.logging.Logger;

import org.apache.solr.util.OpenBitSet;
@@ -17,7 +15,6 @@
import procilege.compute.ExprFormatter;
import procilege.compute.PlaceType;
import procilege.compute.TravelMap;
-import procilege.impl.NameImpl;
import procilege.lang.BoolExprElement;
import procilege.lang.EntityExprElement;
import procilege.lang.ExprElement;
@@ -44,38 +41,41 @@

private Stack<SetoutStackElement> setoutStack = new Stack<SetoutStackElement>();

- private Collection<Name> freenames = new HashSet<Name>();
-
- private HashMap<Name, ExprElement> applications = new HashMap<Name, ExprElement>();
+ private HashMap<Long, Collection<PrivExprMergence>> applications = new HashMap<Long, Collection<PrivExprMergence>>();

private Name bearer;

- private OpenBitSet origins;
-
- private PrivExprMergence nearestMergence;
+ private PrivExprMergence nearestMergence = null;

private int footprint = 0; // for debugging

private HashSet<Class<?>> included;

- ExprExpandTravellerImpl(ExprExpandTravellerImpl tr, Name bearer) {
+ ExprExpandTravellerImpl(ExprExpandTravellerImpl tr, OpenBitSet boundnames) {
+
+ this.boundnames = new OpenBitSet();
+ this.boundnames.or(tr.boundnames);
+ this.boundnames.or(boundnames);
+
+ this.travelmap = tr.travelmap;
+
+ setoutStack.push(new SetoutStackElement());
+ }
+
+ ExprExpandTravellerImpl(ExprExpandTravellerImpl tr) {
+
+ this.boundnames = new OpenBitSet();
+ this.boundnames.or(tr.boundnames);

- this.bearer = bearer;
- this.origins = tr.origins;
this.travelmap = tr.travelmap;
- if (bearer != null)
- this.origins.set(((NameImpl) bearer).nameId);

setoutStack.push(new SetoutStackElement());
}

ExprExpandTravellerImpl(TravelMap<ExprExpandTraveller> travelmap,
- Name bearer) {
+ OpenBitSet boundnames) {

- this.bearer = bearer;
- this.origins = new OpenBitSet();
- if (bearer != null)
- this.origins.set(((NameImpl) bearer).nameId);
+ this.boundnames = boundnames;

this.travelmap = travelmap;

@@ -92,7 +92,7 @@
// included the type: Name and ExprSubstitute

PrivExprComposition plus = new PrivExprComposition();
- PrivExprMergence m = new PrivExprMergence(this.getBearerName());
+ PrivExprMergence m = new PrivExprMergence(getBoundNames());
m.mergePrivilege((PrivExprElement) expr);
plus.add(m);

@@ -100,7 +100,7 @@
} else if (expr instanceof EntityExprElement) {

PrivExprComposition plus = new PrivExprComposition();
- PrivExprMergence m = new PrivExprMergence(this.getBearerName());
+ PrivExprMergence m = new PrivExprMergence(getBoundNames());
m.mergeEntity((EntityExprElement) expr);
plus.add(m);

@@ -109,7 +109,7 @@
} else if (expr instanceof BoolExprElement) {

PrivExprComposition plus = new PrivExprComposition();
- PrivExprMergence m = new PrivExprMergence(this.getBearerName());
+ PrivExprMergence m = new PrivExprMergence(getBoundNames());
m.mergeRestriction((BoolExprElement) expr);
plus.add(m);

@@ -131,7 +131,7 @@
return plus;
} else if (result instanceof ExprElement) {

- PrivExprMergence m = new PrivExprMergence(this.bearer);
+ PrivExprMergence m = new PrivExprMergence(getBoundNames());
plus.add(m);

if (result instanceof PrivExprElement)
@@ -153,48 +153,17 @@
return this.bearer;
}

- public boolean isRecursiveBorne(Name name) {
-
- if (origins.get(((NameImpl) name).nameId))
- return true;
-
- if (bearer != null && bearer.equals(name))
- return true;
-
- if (nearestMergence != null && nearestMergence.isOriginated(name))
- return true;
-
- return false;
+ public void boundname(long name) {
+
+ boundnames.set(name);
}

- public Iterator<Name> freeNameIterator() {
- return freenames.iterator();
- }
+ public void apply(long name, Collection<PrivExprMergence> normterms) {

- public void reportFreeName(Name name) {
-
- if (logger.isLoggable(Level.FINEST)) {
- logger.finest(String.format("free name, %s", ftr.toString(name)));
- }
-
- freenames.add(name);
+ applications.put(name, normterms);
}

- public void reportBoundName(Name name) {
-
- if (logger.isLoggable(Level.FINEST)) {
- logger.finest(String.format("bound name, %s", ftr.toString(name)));
- }
-
- freenames.remove(name);
- }
-
- public void apply(Name name, ExprElement expr) {
-
- applications.put(name, expr);
- }
-
- public ExprElement getApplication(Name name) {
+ public Collection<PrivExprMergence> getApplication(long name) {

return applications.get(name);
}
@@ -277,20 +246,20 @@
// included the type: Name and ExprSubstitute

PrivExprComposition plus = new PrivExprComposition();
- PrivExprMergence m = new PrivExprMergence(this.getBearerName());
+ PrivExprMergence m = new PrivExprMergence(getBoundNames());
m.mergePrivilege((PrivExprElement) expr);
plus.add(m);
} else if (expr instanceof EntityExprElement) {

PrivExprComposition plus = new PrivExprComposition();
- PrivExprMergence m = new PrivExprMergence(this.getBearerName());
+ PrivExprMergence m = new PrivExprMergence(getBoundNames());
m.mergeEntity((EntityExprElement) expr);
plus.add(m);

} else if (expr instanceof BoolExprElement) {

PrivExprComposition plus = new PrivExprComposition();
- PrivExprMergence m = new PrivExprMergence(this.getBearerName());
+ PrivExprMergence m = new PrivExprMergence(getBoundNames());
m.mergeRestriction((BoolExprElement) expr);
plus.add(m);
}
@@ -323,10 +292,28 @@
this.setoutStack.peek().revist = true;
}

- public ExprExpandTraveller spawn(Name bearer) {
+ private OpenBitSet boundnames = new OpenBitSet();
+
+ public OpenBitSet getBoundNames() {
+
+ return boundnames;
+ }
+
+ public ExprExpandTraveller spawn(long boundname) {
+
+ ExprExpandTravellerImpl tr;
+ OpenBitSet bn = new OpenBitSet();
+ bn.set(boundname);
+ tr = new ExprExpandTravellerImpl(this, bn);
+ injector.injectMembers(tr);
+
+ return tr;
+ }
+
+ public ExprExpandTraveller spawn(OpenBitSet boundnames) {

ExprExpandTravellerImpl tr;
- tr = new ExprExpandTravellerImpl(this, bearer);
+ tr = new ExprExpandTravellerImpl(this, boundnames);
injector.injectMembers(tr);

return tr;
@@ -335,7 +322,8 @@
public ExprExpandTraveller spawn(Class<?>[] clzs) {

ExprExpandTravellerImpl tr;
- tr = new ExprExpandTravellerImpl(this, bearer);
+
+ tr = new ExprExpandTravellerImpl(this);
injector.injectMembers(tr);

tr.included = new HashSet<Class<?>>();

Modified: trunk/procilege/src/main/java/procilege/impl/expand/ExprSubstituteExpandPlace.java
==============================================================================
--- trunk/procilege/src/main/java/procilege/impl/expand/ExprSubstituteExpandPlace.java (original)
+++ trunk/procilege/src/main/java/procilege/impl/expand/ExprSubstituteExpandPlace.java Sat Jun 16 00:20:26 2007
@@ -1,8 +1,8 @@
package procilege.impl.expand;

import procilege.compute.ExprExpandTraveller;
-import procilege.compute.PlaceTypeMetadata;
import procilege.compute.PlaceType;
+import procilege.compute.PlaceTypeMetadata;
import procilege.impl.NameImpl;
import procilege.lang.BoolExprOr;
import procilege.lang.CompositeExpr;
@@ -17,13 +17,13 @@
@PlaceTypeMetadata(type = ExprSubstitute.class)
public class ExprSubstituteExpandPlace implements
PlaceType<ExprExpandTraveller> {
-
+
@SuppressWarnings("unchecked")
public void visit(ExprExpandTraveller tr, Object place) {

tr.setout(((ExprSubstitute) place).getExpr());
Object expanded = tr.getPreviousVisitResult();
-
+
ExprElement result = null;

if (expanded instanceof CompositeExpr) {
@@ -67,7 +67,7 @@

if (elem instanceof PrivExprMergence) {
PrivExprMergence om = (PrivExprMergence) elem;
- PrivExprMergence nm = new PrivExprMergence(tr.getBearerName());
+ PrivExprMergence nm = new PrivExprMergence(om.getBoundNames());
nm.mergeEntity(om.getEntityExpr());
nm.mergeRestriction(om.getRestrictionExpr());

@@ -77,7 +77,7 @@
pv = (PrivExprElement) substitute(tr, ex, subst);
nm.mergePrivilege(pv);
}
-
+
tr.sayVisitAgain();

return nm;
@@ -94,7 +94,7 @@
tr.setout(result);
result = (ExprElement) tr.getPreviousVisitResult();

- tr.reportBoundName(n);
+// tr.reportBoundName(n);

return result;
}

Modified: trunk/procilege/src/main/java/procilege/impl/expand/NameExpandPlace.java
==============================================================================
--- trunk/procilege/src/main/java/procilege/impl/expand/NameExpandPlace.java (original)
+++ trunk/procilege/src/main/java/procilege/impl/expand/NameExpandPlace.java Sat Jun 16 00:20:26 2007
@@ -2,6 +2,7 @@

import static java.util.logging.Level.FINEST;

+import java.util.Collection;
import java.util.logging.Logger;

import procilege.compute.ExprExpandTraveller;
@@ -12,7 +13,9 @@
import procilege.lang.BoolExprElement;
import procilege.lang.EntityExprElement;
import procilege.lang.ExprElement;
+import procilege.lang.PrivExprComposition;
import procilege.lang.PrivExprElement;
+import procilege.lang.PrivExprMergence;

import com.google.inject.Inject;

@@ -26,48 +29,29 @@

public void visit(ExprExpandTraveller tr, Object place) {

- NameImpl name = (NameImpl) place;
+ long name = ((NameImpl) place).nameId;

// Type inference by the neighbor of the place.
ExprElement neighbor = tr.getNeighbor();
if (neighbor instanceof PrivExprElement) {

- ExprElement expr = tr.getApplication(name);
- if (expr == null) {
- // no found application, so it's abstraction
-
- if (tr.isRecursiveBorne(name)) {
- // terminate because of the recursive definition.
- tr.result(name);
-
- if (logger.isLoggable(FINEST)) {
- logger.finest(String.format("recursive: %s", ftr
- .toString(name)));
- }
- return;
- }
-
- tr.reportFreeName(name);
- tr.result(name);
-
+ Collection<PrivExprMergence> app = tr.getApplication(name);
+ if (app == null) {
+ tr.result(place);
return;
}
- if (logger.isLoggable(FINEST)) {
-
- logger.finest(String.format("applied1, %s := %s", ftr
- .toString(name), ftr.toString(expr)));
+
+ PrivExprComposition applied = new PrivExprComposition();
+ for (PrivExprElement exp : app) {
+ applied.add(exp);
}

- ExprExpandTraveller subtr = tr.spawn(name);
- subtr.setout(expr);
- expr = (ExprElement) subtr.getPreviousVisitResult();
if (logger.isLoggable(FINEST)) {
-
- logger.finest(String.format("applied, %s := %s", ftr
- .toString(name), ftr.toString(expr)));
+ logger.finest(String.format("applied, { %d /'%s'}", name, ftr
+ .toString(applied)));
}
+ tr.result(applied);

- tr.result(expr);
return;
} else if (neighbor instanceof BoolExprElement
|| neighbor instanceof EntityExprElement) {

Modified: trunk/procilege/src/main/java/procilege/impl/expand/PrivExprCompositionExpandPlace.java
==============================================================================
--- trunk/procilege/src/main/java/procilege/impl/expand/PrivExprCompositionExpandPlace.java (original)
+++ trunk/procilege/src/main/java/procilege/impl/expand/PrivExprCompositionExpandPlace.java Sat Jun 16 00:20:26 2007
@@ -23,7 +23,7 @@
if (!(r instanceof PrivExprMergence)
&& !(r instanceof PrivExprComposition)) {

- PrivExprMergence m = new PrivExprMergence(tr.getBearerName());
+ PrivExprMergence m = new PrivExprMergence(tr.getBoundNames());
m.mergePrivilege((PrivExprElement) r);

r = m;

Modified: trunk/procilege/src/main/java/procilege/impl/expand/PrivExprMergenceExpandPlace.java
==============================================================================
--- trunk/procilege/src/main/java/procilege/impl/expand/PrivExprMergenceExpandPlace.java (original)
+++ trunk/procilege/src/main/java/procilege/impl/expand/PrivExprMergenceExpandPlace.java Sat Jun 16 00:20:26 2007
@@ -1,13 +1,14 @@
package procilege.impl.expand;

+import org.apache.solr.util.OpenBitSet;
+
import procilege.compute.ExprExpandTraveller;
-import procilege.compute.PlaceTypeMetadata;
import procilege.compute.PlaceType;
+import procilege.compute.PlaceTypeMetadata;
import procilege.lang.BoolExprElement;
import procilege.lang.BoolExprOr;
import procilege.lang.EntityExprElement;
import procilege.lang.EntityExprOr;
-import procilege.lang.Name;
import procilege.lang.PrivExprComposition;
import procilege.lang.PrivExprElement;
import procilege.lang.PrivExprMergence;
@@ -21,10 +22,10 @@
PrivExprMergence pv = (PrivExprMergence) place;

PrivExprComposition plus = new PrivExprComposition();
- Name bearer = tr.getBearerName();
+ OpenBitSet boundnames = pv.getBoundNames();

// construct the first identity term
- plus.add(new PrivExprMergence(bearer));
+ plus.add(new PrivExprMergence(tr.getBoundNames()));

Object r;

@@ -39,7 +40,7 @@
for (EntityExprElement ens : (EntityExprOr) r) {
for (PrivExprElement pnt : terms) {

- PrivExprMergence prod = new PrivExprMergence(bearer);
+ PrivExprMergence prod = new PrivExprMergence(boundnames);
prod.mergeEntity(ens);
prod.mergePrivilege(pnt);
plus.add(prod);
@@ -48,7 +49,7 @@
} else {
for (PrivExprElement pnt : terms) {

- PrivExprMergence prod = new PrivExprMergence(bearer);
+ PrivExprMergence prod = new PrivExprMergence(boundnames);
prod.mergeEntity((EntityExprElement) r);
prod.mergePrivilege(pnt);
plus.add(prod);
@@ -67,7 +68,7 @@
for (BoolExprElement pes : (BoolExprOr) r) {
for (PrivExprElement pnt : terms) {

- PrivExprMergence prod = new PrivExprMergence(bearer);
+ PrivExprMergence prod = new PrivExprMergence(boundnames);
prod.mergePrivilege(pnt);
prod.mergeRestriction(pes);
plus.add(prod);
@@ -76,7 +77,7 @@
} else {
for (PrivExprElement pnt : terms) {

- PrivExprMergence prod = new PrivExprMergence(bearer);
+ PrivExprMergence prod = new PrivExprMergence(boundnames);
prod.mergePrivilege(pnt);
prod.mergeRestriction((BoolExprElement) r);
plus.add(prod);
@@ -94,7 +95,7 @@
if (r instanceof PrivExprComposition) {
for (PrivExprElement p1 : (PrivExprComposition) r) {
for (PrivExprElement p2 : terms) {
- PrivExprMergence prod = new PrivExprMergence(bearer);
+ PrivExprMergence prod = new PrivExprMergence(boundnames);
prod.mergePrivilege(p1);
prod.mergePrivilege(p2);
plus.add(prod);
@@ -102,7 +103,7 @@
}
} else {
for (PrivExprElement p2 : terms) {
- PrivExprMergence prod = new PrivExprMergence(bearer);
+ PrivExprMergence prod = new PrivExprMergence(boundnames);
prod.mergePrivilege((PrivExprElement) r);
prod.mergePrivilege(p2);
plus.add(prod);

Modified: trunk/procilege/src/main/java/procilege/impl/formatter/PrivExprMergenceFormatter.java
==============================================================================
--- trunk/procilege/src/main/java/procilege/impl/formatter/PrivExprMergenceFormatter.java (original)
+++ trunk/procilege/src/main/java/procilege/impl/formatter/PrivExprMergenceFormatter.java Sat Jun 16 00:20:26 2007
@@ -2,6 +2,10 @@

import java.util.Iterator;

+import org.apache.solr.util.OpenBitSet;
+
+import merisis.util.BitUtil;
+
import procilege.compute.ExprFormatTraveller;
import procilege.compute.PlaceTypeMetadata;
import procilege.compute.PlaceType;
@@ -52,15 +56,11 @@
tr.setout(n.getRestrictionExpr());
sb.append(']');
}
-
- Iterator<Name> oitr = n.originsIterator();
- if (oitr.hasNext()) {
+
+ OpenBitSet bn = n.getBoundNames();
+ if (!bn.isEmpty()) {
sb.append('<');
- tr.setout( oitr.next());
- while(oitr.hasNext()) {
- sb.append(',');
- tr.setout( oitr.next());
- }
+ BitUtil.format(sb, n.getBoundNames(), ",");
sb.append('>');
}

Modified: trunk/procilege/src/main/java/procilege/lang/ExprSubstitute.java
==============================================================================
--- trunk/procilege/src/main/java/procilege/lang/ExprSubstitute.java (original)
+++ trunk/procilege/src/main/java/procilege/lang/ExprSubstitute.java Sat Jun 16 00:20:26 2007
@@ -7,20 +7,11 @@
private ExprElement object;
private Name boundedName;

- // private List<Substitution> namePairs;
-
public ExprSubstitute(ExprElement expr) {

this.expr = expr;
- // this.namePairs = new ArrayList<Substitution>();
}

- // public ExprSubstitute(ExprElement expr, List<Substitution> namepairs) {
- //
- // this.expr = expr;
- // this.namePairs = namepairs;
- // }
-
public ExprSubstitute(ExprElement expr, ExprElement object, Name bounded) {

this.expr = expr;
@@ -32,39 +23,11 @@
return expr;
}

- // public List<Substitution> getNamePairs() {
- // return namePairs;
- // }
-
- // public void add(Substitution pair) {
- //
- // namePairs.add(pair);
- // }
- //
- // public void add(Collection<Substitution> pairs) {
- //
- // namePairs.addAll(pairs);
- // }
-
public ExprElement getObject() {
return object;
}

public Name getBoundedName() {
return boundedName;
- }
-
- public Object eval() {
- // TODO Auto-generated method stub
- return null;
- }
-
- public ExprElement norm() {
- // TODO Auto-generated method stub
- return null;
- }
-
- public Object clone() {
- return null;
}
}

Modified: trunk/procilege/src/main/java/procilege/lang/PrivExprElement.java
==============================================================================
--- trunk/procilege/src/main/java/procilege/lang/PrivExprElement.java (original)
+++ trunk/procilege/src/main/java/procilege/lang/PrivExprElement.java Sat Jun 16 00:20:26 2007
@@ -1,5 +1,7 @@
package procilege.lang;

+
public interface PrivExprElement extends ExprElement {
+

}

Modified: trunk/procilege/src/main/java/procilege/lang/PrivExprMergence.java
==============================================================================
--- trunk/procilege/src/main/java/procilege/lang/PrivExprMergence.java (original)
+++ trunk/procilege/src/main/java/procilege/lang/PrivExprMergence.java Sat Jun 16 00:20:26 2007
@@ -2,23 +2,26 @@

import java.util.Collection;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.Set;

-public class PrivExprMergence implements PrivExprElement {
+import org.apache.solr.util.OpenBitSet;
+
+import procilege.impl.NameImpl;

+public class PrivExprMergence implements PrivExprElement {
+
+ private OpenBitSet boundnames = new OpenBitSet();
+
private Set<PrivExprElement> privileges = new HashSet<PrivExprElement>();

private BoolExprElement restrictionExpr = null;

private EntityExprElement entityExpr = null;

- private Collection<Name> origins = new HashSet<Name>();
-
- public PrivExprMergence(Name bearer) {
-
- if (bearer != null)
- origins.add(bearer);
+ public PrivExprMergence(OpenBitSet names) {
+
+ if (names != null)
+ boundnames.or(names);
}

public BoolExprElement getRestrictionExpr() {
@@ -72,37 +75,62 @@
mergePrivilege(t);
}

- origins.addAll(prod.origins);
+ boundnames.or(prod.boundnames);
} else {

privileges.add(term);
}
}
-
- public void originate(Name bearer) {
-
- this.origins.add(bearer);
- }

- public boolean isOriginated(Name name) {
+ public OpenBitSet getFreeNames() {
+
+ OpenBitSet names = new OpenBitSet();
+ pname(this, names);
+
+ names.andNot(boundnames);

- return origins.contains(name);
+ return names;
}

- public Iterator<Name> originsIterator() {
+ private void pname(PrivExprElement pexpr, OpenBitSet names) {

- return origins.iterator();
+ if (pexpr instanceof PrivExprMergence) {
+
+ PrivExprMergence m = (PrivExprMergence)pexpr;
+ for (PrivExprElement pe: m.getPrivileges()) {
+ pname(pe, names);
+ }
+ } else if (pexpr instanceof PrivExprComposition) {
+
+ PrivExprComposition m = (PrivExprComposition)pexpr;
+
+ for (PrivExprElement pe: m.getTerms()) {
+ pname(pe, names);
+ }
+ } else if (pexpr instanceof NameImpl) {
+
+ names.set(((NameImpl)pexpr).nameId);
+ } else if (pexpr instanceof ExprSubstitute) {
+
+ ExprSubstitute subst = (ExprSubstitute) pexpr;
+ pname((PrivExprElement)subst.getExpr(), names);
+ } else
+ throw new UnsupportedOperationException("unkown type of name: " + pexpr);
}
-
+
+ public OpenBitSet getBoundNames() {
+ return boundnames;
+ }
+
@Override
public int hashCode() {
- final int PRIME = 31;
- int result = 1;
- result = PRIME * result
+ final int prime = 31;
+ int result = super.hashCode();
+ result = prime * result
+ ((entityExpr == null) ? 0 : entityExpr.hashCode());
- result = PRIME * result
+ result = prime * result
+ ((privileges == null) ? 0 : privileges.hashCode());
- result = PRIME * result
+ result = prime * result
+ ((restrictionExpr == null) ? 0 : restrictionExpr.hashCode());
return result;
}
@@ -111,7 +139,7 @@
public boolean equals(Object obj) {
if (this == obj)
return true;
- if (obj == null)
+ if (!super.equals(obj))
return false;
if (getClass() != obj.getClass())
return false;

Modified: trunk/procilege/src/main/java/procilege/lang/PrivilegeFormAnalysis.java
==============================================================================
--- trunk/procilege/src/main/java/procilege/lang/PrivilegeFormAnalysis.java (original)
+++ trunk/procilege/src/main/java/procilege/lang/PrivilegeFormAnalysis.java Sat Jun 16 00:20:26 2007
@@ -12,9 +12,9 @@

Collection<PrivilegeFormTerm> normalTerms(PrivilegeForm privform);

- PrivExprComposition normlize(Name name);
+ Collection<PrivExprMergence> normlize(Name name);

- PrivExprComposition normlize(PrivilegeForm pf);
+ Collection<PrivExprMergence> normlize(PrivilegeForm pf);

boolean available(PrivilegeFormTerm t);

Modified: trunk/procilege/src/test/java/procilege/test/pal/AbstractPalTest.java
==============================================================================
--- trunk/procilege/src/test/java/procilege/test/pal/AbstractPalTest.java (original)
+++ trunk/procilege/src/test/java/procilege/test/pal/AbstractPalTest.java Sat Jun 16 00:20:26 2007
@@ -1,5 +1,7 @@
package procilege.test.pal;

+import java.util.Collection;
+import java.util.logging.Level;
import java.util.logging.Logger;

import javax.xml.namespace.QName;
@@ -22,6 +24,7 @@
import procilege.lang.ExprElement;
import procilege.lang.Name;
import procilege.lang.PrivExprElement;
+import procilege.lang.PrivExprMergence;
import procilege.lang.PrivilegeFormAnalysis;
import procilege.test.TestZero;

@@ -54,10 +57,10 @@

@Inject
protected ComputationalEntityMgr cem;
-
+
@Inject
protected MerisisVM mvm;
-
+
@Inject
private Procilege pclg;

@@ -80,7 +83,6 @@

return new NameImpl(smr.sense(qn));
}
-

public void dumpHistory(int from, int to) {

@@ -92,7 +94,7 @@
long[] list = ht.next(i);
if (list == null)
continue;
-
+
if (smr.introspect(i) == null)
continue;

@@ -111,11 +113,11 @@
TestZero.module());

guice.injectMembers(this);
-
+
mvm.give(nm("TC"));
mvm.stepin();
}
-
+
@After
public void aftercase() {
mvm.stepout();
@@ -163,7 +165,7 @@

return exp;
}
-
+
protected void isa(Name a, Name b) {
pe.setEntityCategory(a, b);
}
@@ -194,5 +196,20 @@

protected void tell(String content) {
pclg.tell(null, null, content);
+ }
+
+ protected void printMergences(Collection<PrivExprMergence> exprs) {
+
+ StringBuilder sb = new StringBuilder();
+ sb.append("expr collection: \n");
+ int i = 0;
+ for (PrivExprMergence term : exprs) {
+ sb.append(String.format("%04d: '", i++));
+ ftr.format(sb, term);
+ sb.append("', fn:{");
+ BitUtil.format(sb, term.getFreeNames(), ",");
+ sb.append("}\n");
+ }
+ logger.info(sb.toString());
}
}

Modified: trunk/procilege/src/test/java/procilege/test/pal/ComputationalEntityMgrTest1.java
==============================================================================
--- trunk/procilege/src/test/java/procilege/test/pal/ComputationalEntityMgrTest1.java (original)
+++ trunk/procilege/src/test/java/procilege/test/pal/ComputationalEntityMgrTest1.java Sat Jun 16 00:20:26 2007
@@ -21,6 +21,8 @@
try {
def(nn("p1"), pvm(nn("a")));
dumpHistory(0, 30);
+ printExpr(cem.retrievePrivlegeExpr(nn("p1")));
+ printExpr(pvm(nn("a")));
assertEquals(pvm(nn("a")), cem.retrievePrivlegeExpr(nn("p1")));

def(nn("p1"), pvm(nn("b")));

Modified: trunk/procilege/src/test/java/procilege/test/pal/EntityEquivTest1.java
==============================================================================
--- trunk/procilege/src/test/java/procilege/test/pal/EntityEquivTest1.java (original)
+++ trunk/procilege/src/test/java/procilege/test/pal/EntityEquivTest1.java Sat Jun 16 00:20:26 2007
@@ -17,27 +17,19 @@
@Test
public void test1() {

- assertEquals(1L, nm("d01"));
- assertEquals(2L, nm("d02"));
- assertEquals(3L, nm("d03"));
- assertEquals(4L, nm("d04"));
- assertEquals(5L, nm("d05"));
+ assertEquals(2L, nm("d01"));
+ assertEquals(3L, nm("d02"));
+ assertEquals(4L, nm("d03"));
+ assertEquals(5L, nm("d04"));
+ assertEquals(6L, nm("d05"));

- mvm.give(nm("T0"));
- mvm.stepin();
- try {
+ isa(nn("d01"), nn("d05"));
+ isa(nn("d02"), nn("d05"));

- isa(nn("d01"), nn("d05"));
- isa(nn("d02"), nn("d05"));
+ dumpHistory(0, 50);

- dumpHistory(0, 50);
-
- // d1 == d5 && d1
- assertTrue(cem.equiv(new long[][] { { nm("d01") } },
- new long[][] { { nm("d01"), nm("d05") } }));
-
- } finally {
- mvm.stepout();
- }
+ // d1 == d5 && d1
+ assertTrue(cem.equiv(new long[][] { { nm("d01") } }, new long[][] { {
+ nm("d01"), nm("d05") } }));
}
}

Modified: trunk/procilege/src/test/java/procilege/test/pal/ExprExpandTest.java
==============================================================================
--- trunk/procilege/src/test/java/procilege/test/pal/ExprExpandTest.java (original)
+++ trunk/procilege/src/test/java/procilege/test/pal/ExprExpandTest.java Sat Jun 16 00:20:26 2007
@@ -160,15 +160,4 @@

@Inject
private ExprExpand epd;
-
- @Inject
- private TestZero z;
-
- @Before
- public void initProcilege() {
- Injector guice = Guice.createInjector(new DefaultProcilegeModule(),
- TestZero.module());
-
- guice.injectMembers(this);
- }
}

Modified: trunk/procilege/src/test/java/procilege/test/pal/NormalFormTest.java
==============================================================================
--- trunk/procilege/src/test/java/procilege/test/pal/NormalFormTest.java (original)
+++ trunk/procilege/src/test/java/procilege/test/pal/NormalFormTest.java Sat Jun 16 00:20:26 2007
@@ -3,46 +3,39 @@
import static org.junit.Assert.assertEquals;

import java.io.IOException;
+import java.util.Collection;

import org.antlr.runtime.RecognitionException;
-import org.junit.Before;
import org.junit.Test;

-import procilege.impl.DefaultProcilegeModule;
-import procilege.lang.PrivExprComposition;
-import procilege.lang.PrivilegeFormAnalysis;
-import procilege.test.TestZero;
-
-import com.google.inject.Guice;
-import com.google.inject.Inject;
-import com.google.inject.Injector;
+import procilege.lang.PrivExprMergence;

-public class NormalFormTest {
+public class NormalFormTest extends AbstractPalTest {

@Test
public void normalform() throws IOException, RecognitionException {

- z.tell("p1 := a*p2{x/e} + z");
- z.tell("p2 := (c + d)*e");
- z.tell("x := s + t");
-
- PrivExprComposition pfexpr;
- pfexpr = pfa.normlize(z.ln("p1"));
- z.printExpr(pfexpr);
- assertEquals(5, pfexpr.size());
- }
-
- @Inject
- private TestZero z;
-
- @Inject
- private PrivilegeFormAnalysis pfa;
-
- @Before
- public void initProcilege() {
- Injector guice = Guice.createInjector(new DefaultProcilegeModule(),
- TestZero.module());
-
- guice.injectMembers(this);
+ assertEquals(2L, nm("p1"));
+ assertEquals(3L, nm("p2"));
+ assertEquals(4L, nm("a"));
+ assertEquals(5L, nm("c"));
+ assertEquals(6L, nm("d"));
+ assertEquals(7L, nm("e"));
+ assertEquals(8L, nm("s"));
+ assertEquals(9L, nm("t"));
+ assertEquals(10L, nm("x"));
+ assertEquals(11L, nm("z"));
+
+ tell("p1 := a*p2{x/e} + z");
+ tell("p2 := (c + d)*e");
+ tell("x := s + t");
+
+ dumpHistory(0, 100);
+
+ Collection<PrivExprMergence> terms;
+ printExpr(cem.retrievePrivlegeExpr(nn("p1")));
+ terms = pfa.normlize(z.ln("p1"));
+ printMergences(terms);
+ assertEquals(5, terms.size());
}
}

Modified: trunk/procilege/src/test/java/procilege/test/pal/PrivExprSubstitutionNormTest.java
==============================================================================
--- trunk/procilege/src/test/java/procilege/test/pal/PrivExprSubstitutionNormTest.java (original)
+++ trunk/procilege/src/test/java/procilege/test/pal/PrivExprSubstitutionNormTest.java Sat Jun 16 00:20:26 2007
@@ -1,62 +1,34 @@
package procilege.test.pal;

import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;

-import java.util.logging.Logger;
+import java.util.Collection;

-import org.junit.Before;
import org.junit.Test;

-import procilege.compute.ExprExpand;
-import procilege.compute.ExprFormatter;
-import procilege.impl.DefaultProcilegeModule;
-import procilege.lang.CompositeExpr;
-import procilege.lang.ExprElement;
-import procilege.lang.PrivilegeFormAnalysis;
-import procilege.test.TestZero;
-
-import com.google.inject.Guice;
-import com.google.inject.Inject;
-import com.google.inject.Injector;
+import procilege.lang.PrivExprMergence;

public class PrivExprSubstitutionNormTest extends AbstractPalTest {

@Test
public void case1() {

- ExprElement exp;
- CompositeExpr<? extends ExprElement> expanded;
+ assertEquals(2L, nm("p"));
+ assertEquals(3L, nm("s"));
+ assertEquals(4L, nm("t"));
+ assertEquals(5L, nm("x"));
+ assertEquals(6L, nm("y"));
+ assertEquals(7L, nm("a"));

tell("p := (a{(x+y)/a}){(s+t)/x}");
- exp = pvexp(nn("p"));
- assertNotNull(exp);
- expanded = pfa.normlize(z.ln("p"));
- printExpr("normorlized:", expanded);
- assertEquals(3, expanded.size());
- }
-
- @Inject
- private PrivilegeFormAnalysis pfa;
-
- @Inject
- private ExprExpand epd;
-
-
- @Inject
- private Logger logger;
-
- @Inject
- private ExprFormatter ftr;
-
- @Inject
- private TestZero z;
-
- @Before
- public void initProcilege() {
- Injector guice = Guice.createInjector(new DefaultProcilegeModule(),
- TestZero.module());

- guice.injectMembers(this);
+ dumpHistory(0, 100);
+
+ printExpr(cem.retrievePrivlegeExpr(nn("p")));
+
+ Collection<PrivExprMergence> terms;
+ terms = pfa.normlize(z.ln("p"));
+ printMergences(terms);
+ assertEquals(3, terms.size());
}
}

Modified: trunk/procilege/src/test/java/procilege/test/pal/RecursivePrivilegeTest.java
==============================================================================
--- trunk/procilege/src/test/java/procilege/test/pal/RecursivePrivilegeTest.java (original)
+++ trunk/procilege/src/test/java/procilege/test/pal/RecursivePrivilegeTest.java Sat Jun 16 00:20:26 2007
@@ -3,44 +3,46 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

+import java.util.Collection;
+
import org.junit.Test;

-import procilege.lang.PrivExprComposition;
+import procilege.lang.PrivExprMergence;

public class RecursivePrivilegeTest extends AbstractPalTest {

@Test
public void norm() {

- PrivExprComposition pfexpr;
+ Collection<PrivExprMergence> terms;

tell("p := p");
- pfexpr = pfa.normlize(z.ln("p"));
- z.printExpr(pfexpr);
- assertEquals(1, pfexpr.size());
- dumpHistory(0, 20);
- assertTrue(z.available(z.ln("p")));
-//
-// z.tell("p := p/p*[1==1]");
-// pfexpr = pfa.normlize(z.ln("p"));
-// z.printExpr(pfexpr);
-// assertEquals(1, pfexpr.size());
-// assertTrue(z.available(z.ln("p")));
-//
-// z.tell("p := a + p");
-// pfexpr = pfa.normlize(z.ln("p"));
-// z.printExpr(pfexpr);
-// assertEquals(2, pfexpr.size());
-// assertTrue(z.available(z.ln("p")));
-//
-// z.tell("p := a + q");
-// z.tell("q := b + p");
-// pfexpr = pfa.normlize(z.ln("p"));
-// // pfexpr = pfa.normlize(z.ln("q"));
-// z.printExpr(pfexpr);
-// assertEquals(3, pfexpr.size());
-// pfexpr = pfa.normlize(z.ln("q"));
-// assertEquals(3, pfexpr.size());
-// assertTrue(z.available(z.ln("q")));
+ terms = pfa.normlize(nn("p"));
+ printMergences(terms);
+ assertEquals(1, terms.size());
+ assertTrue(pfa.available(pfa.privform(nn("p"))));
+
+ tell("p := p/p*[1==1]");
+ terms = pfa.normlize(nn("p"));
+ printMergences(terms);
+ assertEquals(1, terms.size());
+ assertTrue(pfa.available(pfa.privform(nn("p"))));
+
+ tell("p := a + p");
+ terms = pfa.normlize(nn("p"));
+ printMergences(terms);
+ assertEquals(2, terms.size());
+ assertTrue(pfa.available(pfa.privform(nn("p"))));
+
+ tell("p := a + q");
+ tell("q := b + p");
+ terms = pfa.normlize(nn("p"));
+ printMergences(terms);
+ assertEquals(3, terms.size());
+ assertTrue(pfa.available(pfa.privform(nn("p"))));
+ terms = pfa.normlize(nn("q"));
+ printMergences(terms);
+ assertEquals(3, terms.size());
+ assertTrue(pfa.available(pfa.privform(nn("q"))));
}
}

Reply all
Reply to author
Forward
0 new messages