[procilege commit] r80 - in trunk/procilege/src: main/java/merisis/traitspace main/java/merisis/util main/java/proci...

0 views
Skip to first unread message

codesite...@google.com

unread,
Jun 16, 2007, 10:54:45 AM6/16/07
to procil...@googlegroups.com
Author: lcgong
Date: Sat Jun 16 07:53:27 2007
New Revision: 80

Modified:
trunk/procilege/src/main/java/merisis/traitspace/Morphism.java
trunk/procilege/src/main/java/merisis/util/BitUtil.java
trunk/procilege/src/main/java/procilege/impl/PrivFormAnalysisImpl.java
trunk/procilege/src/main/java/procilege/impl/eval/RelationalEvalPlace.java
trunk/procilege/src/main/java/procilege/lang/PrivExprMergence.java
trunk/procilege/src/test/java/merisis/contentcloud/ContentCloudTest1.java
trunk/procilege/src/test/java/merisis/traitspace/MorphismProofTest.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/simplecase/PaperLv2007asd.java
trunk/procilege/src/test/java/procilege/test/simplecase/SimpleCaseTest.java

Log:
[Issue 34]Fixed the proof algorithm of morphism; Fixed unit tests.

Modified: trunk/procilege/src/main/java/merisis/traitspace/Morphism.java
==============================================================================
--- trunk/procilege/src/main/java/merisis/traitspace/Morphism.java (original)
+++ trunk/procilege/src/main/java/merisis/traitspace/Morphism.java Sat Jun 16 07:53:27 2007
@@ -1,10 +1,8 @@
package merisis.traitspace;

import static java.lang.String.format;
+import static merisis.util.BitUtil.bitsetOrArray;

-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

@@ -41,7 +39,14 @@

bs.set(a);

- return proof(checked, f, bs, b);
+ boolean r = proof(checked, f, bs, b);
+
+ if (logger.isLoggable(Level.FINEST)) {
+ logger.finest(format("%s, %d:%d-->%d", (r ? "proofed" : "absurd"),
+ f, a, b));
+ }
+
+ return r;
}

public long[] domain(long f, long b, boolean recursive) {
@@ -64,7 +69,7 @@
}

/**
- * Proof the implications.
+ * Proof the implications (f: a --> b).
*
* @param f
* the relation to be proofed
@@ -74,129 +79,97 @@
*/
public boolean proof(long f, long[][] a, long[][] b) {

- int numa = a.length;
- int numb = b.length;
-
- // reduce and group the implications.
- ArrayList<long[]> diads = new ArrayList<long[]>();
- List<List<Integer>> groups = new ArrayList<List<Integer>>();
- for (int i = 0; i < numa; i++) {
- long[] la = a[i];
- for (int j = 0; j < numb; j++) {
- long[] lb = b[i];
-
- ArrayList<Integer> group = new ArrayList<Integer>();
- for (int ia = 0; ia < la.length; ia++) {
- for (int ib = 0; ib < lb.length; ib++) {
-
- long[] diad = new long[] { la[ia], lb[ib] };
- int index = diads.indexOf(diad);
- if (index == -1) {
-
- diads.add(diad);
- group.add(diads.size() - 1);
- } else {
- group.add(index);
- }
- }
- }
- groups.add(group);
- }
+ if (logger.isLoggable(Level.FINEST)) {
+ logger.finest(String.format("proofing, %d: %s --> %s", f, BitUtil
+ .toString(a), BitUtil.toString(b)));
}

- for (List<Integer> group : groups) {
+ OpenBitSet as = new OpenBitSet();
+ for (int i = 0; i < a.length; i++) {

- boolean test = true;
- for (int i : group) {
-
- long[] diad = diads.get(i);
+ long[] at = a[i];
+ if (at.length == 1) {
+ as.set(at[0]);
+ continue;
+ }

- if (!exists(f, diad[0], diad[1])) {
- test = false;
-
- if (logger.isLoggable(Level.FINEST)) {
- logger.finest(String.format(
- "proofed %d: %d -> %d, FALSE", f, diad[0],
- diad[1]));
- }
- break;
- }
+ OpenBitSet ats = null;
+ for (int j = 0; j < at.length; j++) {

- if (logger.isLoggable(Level.FINEST)) {
- logger.finest(String.format("proofed %d: %d -> %d, TRUE",
- f, diad[0], diad[1]));
+ long t = at[j];
+ OpenBitSet ax;
+ ax = bitsetOrArray(new OpenBitSet(), domain(f, t, true));
+ ax.set(t);
+
+ if (ats == null) {
+ ats = new OpenBitSet();
+ ats.or(ax);
+ continue;
}
+ ats.and(ax);
}

- if (test)
- return true;
+ if (ats != null)
+ as.or(ats);
+ }

- HashSet<Long> aset = new HashSet<Long>();
- for (int i : group) {
- long[] diad = diads.get(i);
- aset.add(diad[0]);
- }
+ if (logger.isLoggable(Level.FINEST)) {
+ logger.finest("antecedent: " + BitUtil.toString(as));
+ }
+
+ if (as.isEmpty())
+ return true; // 0 --> t
+
+ OpenBitSet bs = new OpenBitSet();
+ for (int i = 0; i < b.length; i++) {
+
+ long[] at = b[i];

- if (aset.size() == 1)
+ if (at.length == 1) {
+ bs.set(at[0]);
continue;
+ }
+
+ OpenBitSet ts = null;
+ for (int j = 0; j < at.length; j++) {

- OpenBitSet bs = null;
- for (long ax : aset) {
- OpenBitSet bx = BitUtil.bitsetOrArray(new OpenBitSet(), domain(
- f, ax, true));
-
- logger.finest(String.format("%d from {%s}", ax, BitUtil
- .toString(bx)));
- if (bs == null) {
- bs = new OpenBitSet();
- bs.or(bx);
+ long t = at[j];
+ OpenBitSet x;
+ x = bitsetOrArray(new OpenBitSet(), domain(f, t, true));
+ x.set(t);
+
+ if (ts == null) {
+ ts = new OpenBitSet();
+ ts.or(x);
continue;
}
- bs.and(bx);
+ ts.and(x);
}

- if (logger.isLoggable(Level.FINEST)) {
+ bs.or(ts);
+ }

- logger.finest(String.format("conviction, %s : {%s}", aset
- .toString(), BitUtil.toString(bs)));
- }
+ if (logger.isLoggable(Level.FINEST)) {
+ logger.finest("sequent: " + BitUtil.toString(bs));
+ }

- if (bs.isEmpty())
- continue;
+ if (bs.isEmpty())
+ return false; // t --> 0

- HashSet<Long> bset = new HashSet<Long>();
- for (int i : group) {
- long[] diad = diads.get(i);
- bset.add(diad[1]);
- }
+ L: for (long ax = as.nextSetBit(0); ax >= 0; ax = as.nextSetBit(ax + 1)) {

- test = true;
- for (long ax = bs.nextSetBit(0); ax >= 0; ax = bs
- .nextSetBit(ax + 1)) {
-
- for (long bx : bset) {
- if (!exists(f, ax, bx)) {
- test = false;
-
- if (logger.isLoggable(Level.FINEST)) {
- logger.finest(String.format(
- "proofed %d: %d -> %d, FALSE", f, ax, bx));
- }
- break;
- }
-
- if (logger.isLoggable(Level.FINEST)) {
- logger.finest(String.format(
- "proofed %d: %d -> %d, TRUE", f, ax, bx));
- }
+ for (int i = 0; i < b.length; i++) {
+ long[] bt = b[i];
+ for (int j = 0; j < bt.length; j++) {
+ if (exists(f, ax, bt[j]))
+ continue L; // proofed ax --> b, next ax
}
}

- if (test)
- return true;
+ return false; // there is a absurd ax.
}

- return false;
+ return true;
}

private OpenBitSet computeCodomain(long f, OpenBitSet todo,
@@ -291,8 +264,8 @@
long[] dots;
dots = mvm.read();
if (logger.isLoggable(Level.FINEST)) {
- logger.finest(String.format("%d's domain of %d: {%s}", f, to,
- BitUtil.toString(dots)));
+ logger.finest(String.format("%d's domain of %d: %s", f, to, BitUtil
+ .toString(dots)));
}

if (dots == null)
@@ -313,7 +286,7 @@
long[] dots;
dots = mvm.read();
if (logger.isLoggable(Level.FINEST)) {
- logger.finest(String.format("%d's codomain of %d : {%s}", f, from,
+ logger.finest(String.format("%d's codomain of %d : %s", f, from,
BitUtil.toString(dots)));
}

Modified: trunk/procilege/src/main/java/merisis/util/BitUtil.java
==============================================================================
--- trunk/procilege/src/main/java/merisis/util/BitUtil.java (original)
+++ trunk/procilege/src/main/java/merisis/util/BitUtil.java Sat Jun 16 07:53:27 2007
@@ -42,16 +42,40 @@
}

public static String toString(long[] array) {
+
StringBuilder sb = new StringBuilder();
+ sb.append("{");
+ if (array != null) {
+ format(sb, array, ",");
+ }
+ sb.append("}");

- format(sb, array, ",");
return sb.toString();
}

- public static String toString(OpenBitSet bs) {
+ public static String toString(long[][] array) {
+
StringBuilder sb = new StringBuilder();
+ sb.append("{");
+ if (array != null) {
+ for (long[] ay : array) {
+ sb.append("{");
+ format(sb, ay, ",");
+ sb.append("}");
+ }
+ }
+ sb.append("}");
+
+ return sb.toString();
+ }

- format(sb, bs, ",");
+ public static String toString(OpenBitSet bs) {
+ StringBuilder sb = new StringBuilder();
+ sb.append("{");
+ if (bs != null) {
+ format(sb, bs, ",");
+ }
+ sb.append("}");
return sb.toString();
}

@@ -61,7 +85,7 @@
sb.append('{');

while (true) {
-
+
if (c == null)
break;

@@ -71,7 +95,7 @@
BitUtil.format(sb, itr.next(), ",");
sb.append('}');
}
-
+
while (itr.hasNext()) {
sb.append(',');
sb.append('{');

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 07:53:27 2007
@@ -208,7 +208,7 @@
}
return false;
}
-
+
// assert the entity equivalence being inavailable
if (!f1EntGroup.isEmpty() && !f2EntGroup.isEmpty()
&& !isEntitySetEquivalent(f1EntGroup, f2EntGroup)) {
@@ -234,7 +234,7 @@
a[i++] = BitUtil.toArray(s);
}

- long[][] b = new long[m.size()][];
+ long[][] b = new long[n.size()][];
i = 0;
for (OpenBitSet s : n) {
b[i++] = BitUtil.toArray(s);
@@ -377,8 +377,6 @@
PrivilegeFormImpl pf = (PrivilegeFormImpl) privform(new NameImpl(name));
if (pf == null)
return null;
-
- logger.info("name: " + name +", " + pf.expr);

return _normlize(tr.spawn(name), pf.expr);
}

Modified: trunk/procilege/src/main/java/procilege/impl/eval/RelationalEvalPlace.java
==============================================================================
--- trunk/procilege/src/main/java/procilege/impl/eval/RelationalEvalPlace.java (original)
+++ trunk/procilege/src/main/java/procilege/impl/eval/RelationalEvalPlace.java Sat Jun 16 07:53:27 2007
@@ -1,5 +1,7 @@
package procilege.impl.eval;

+import com.google.inject.Inject;
+
import procilege.compute.ExprEvaluationTraveller;
import procilege.compute.PlaceType;
import procilege.compute.PlaceTypeMetadata;
@@ -10,6 +12,7 @@
@PlaceTypeMetadata(type = RelationalExpr.class)
public class RelationalEvalPlace implements PlaceType<ExprEvaluationTraveller> {

+ @Inject
private ComputationalEntityMgr cem;

public void visit(ExprEvaluationTraveller tr, Object place) {

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 07:53:27 2007
@@ -125,7 +125,7 @@
@Override
public int hashCode() {
final int prime = 31;
- int result = super.hashCode();
+ int result = 1;
result = prime * result
+ ((entityExpr == null) ? 0 : entityExpr.hashCode());
result = prime * result
@@ -139,7 +139,7 @@
public boolean equals(Object obj) {
if (this == obj)
return true;
- if (!super.equals(obj))
+ if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;

Modified: trunk/procilege/src/test/java/merisis/contentcloud/ContentCloudTest1.java
==============================================================================
--- trunk/procilege/src/test/java/merisis/contentcloud/ContentCloudTest1.java (original)
+++ trunk/procilege/src/test/java/merisis/contentcloud/ContentCloudTest1.java Sat Jun 16 07:53:27 2007
@@ -142,6 +142,8 @@
} finally {
mvm.stepout();
}
+
+ dumpHistory("** Scene-4 History **", 0, 100);

mvm.give(nm("tom"));
mvm.stepin();
@@ -158,14 +160,14 @@
mvm.give(nm("tag"), lbl);
mvm.source();
mvm.focus();
+ mvm.autobeam();
mvm.give(lbl, nm("tag"));
- mvm.tprism();
mvm.complement();

long[] prop1 = mvm.read();
Assert.assertNotNull(prop1);

- logger.fine("tag spectrum:" + BitUtil.toString(prop1));
+ logger.fine("tag's content:" + BitUtil.toString(prop1));

OpenBitSet bs = new OpenBitSet();
for (int i = 0; i < prop1.length; i++) {
@@ -173,8 +175,8 @@
mvm.give(prop1[i], nm("content-type"), nm("pdf"));
mvm.source();
mvm.focus();
+ mvm.autobeam();
mvm.give(nm("pdf"), nm("content-type"));
- mvm.tprism();
mvm.complement();
long[] prop2 = mvm.read();
if (prop2 == null)
@@ -195,8 +197,8 @@
mvm.give(nm("tag"), lbl);
mvm.source();
mvm.focus();
+ mvm.autobeam();
mvm.give(lbl, nm("tag"));
- mvm.tprism();
mvm.complement();

long[] prop1 = mvm.read();
@@ -210,8 +212,8 @@
mvm.give(prop1[i], nm("content-type"), nm("pdf"));
mvm.source();
mvm.focus();
+ mvm.autobeam();
mvm.give(nm("pdf"), nm("content-type"));
- mvm.tprism();
mvm.complement();
long[] prop2 = mvm.read();
if (prop2 == null)

Modified: trunk/procilege/src/test/java/merisis/traitspace/MorphismProofTest.java
==============================================================================
--- trunk/procilege/src/test/java/merisis/traitspace/MorphismProofTest.java (original)
+++ trunk/procilege/src/test/java/merisis/traitspace/MorphismProofTest.java Sat Jun 16 07:53:27 2007
@@ -1,5 +1,6 @@
package merisis.traitspace;

+import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;
import junit.framework.Assert;

@@ -56,7 +57,7 @@
assertTrue(mp.proof(isa, //
new long[][] { { n("e"), n("f") } }, //
new long[][] { { n("c") } }));
-
+
// (a && c) -> c
assertTrue(mp.proof(isa, //
new long[][] { { n("a"), n("c") } }, //
@@ -64,8 +65,17 @@

// a -> (a && c )
assertTrue(mp.proof(isa, //
- new long[][] { { n("a")} }, //
+ new long[][] { { n("a") } }, //
+ new long[][] { { n("a"), n("c") } }));
+
+ // 0 -> (a && c )
+ assertTrue(mp.proof(isa, //
+ new long[][] {}, //
new long[][] { { n("a"), n("c") } }));
+
+ // (a && c ) -> 0
+ assertFalse(mp.proof(isa, //
+ new long[][] { { n("a"), n("c") } }, new long[][] {}));

} finally {
mvm.stepout();

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 07:53:27 2007
@@ -90,17 +90,18 @@
sb.append("\n");
for (long i = from; i <= to; i++) {

+ QName qn = smr.introspect(i);
+ if (qn == null)
+ continue;
+ sb.append(String.format("%02d(%10s): ", i, qn.getLocalPart()));
+
OpenBitSet bs = new OpenBitSet();
long[] list = ht.next(i);
- if (list == null)
- continue;
-
- if (smr.introspect(i) == null)
+ if (list == null) {
+ sb.append("\n");
continue;
+ }

- sb.append(String.format("[%02d: ", i));
- ftr.format(sb, new NameImpl(i));
- sb.append("] ");
BitUtil.format(sb, BitUtil.bitsetOrArray(bs, list), ",");
sb.append("\n");
}
@@ -120,7 +121,11 @@

@After
public void aftercase() {
- mvm.stepout();
+ try {
+ mvm.stepout();
+ } catch (Exception e) {
+ logger.log(Level.WARNING, e.getMessage(),e);
+ }
}

/**

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 07:53:27 2007
@@ -2,6 +2,7 @@

import static junit.framework.Assert.assertEquals;

+import org.junit.Assert;
import org.junit.Test;

import procilege.impl.ComputationalEntityMgr;
@@ -16,28 +17,23 @@
@Test
public void test1() {

- mvm.give(nm("T0"));
- mvm.stepin();
- 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")));
- dumpHistory(0, 30);
- assertEquals(pvm(nn("b")), cem.retrievePrivlegeExpr(nn("p1")));
-
- def(nn("p2"), pvm(nn("c")));
- dumpHistory(0, 30);
- assertEquals(pvm(nn("c")), cem.retrievePrivlegeExpr(nn("p2")));
-
- def(nn("p1"), pvm(nn("d")));
- dumpHistory(0, 30);
- assertEquals(pvm(nn("d")), cem.retrievePrivlegeExpr(nn("p1")));
- } finally {
- mvm.stepout();
- }
+ def(nn("p1"), pvm(nn("a")));
+ dumpHistory(0, 30);
+ printExpr(cem.retrievePrivlegeExpr(nn("p1")));
+ printExpr(pvm(nn("a")));
+ Assert.assertTrue(pvm(nn("a")).equals(pvm(nn("a"))));
+ assertEquals(pvm(nn("a")), cem.retrievePrivlegeExpr(nn("p1")));
+
+ def(nn("p1"), pvm(nn("b")));
+ dumpHistory(0, 30);
+ assertEquals(pvm(nn("b")), cem.retrievePrivlegeExpr(nn("p1")));
+
+ def(nn("p2"), pvm(nn("c")));
+ dumpHistory(0, 30);
+ assertEquals(pvm(nn("c")), cem.retrievePrivlegeExpr(nn("p2")));
+
+ def(nn("p1"), pvm(nn("d")));
+ dumpHistory(0, 30);
+ assertEquals(pvm(nn("d")), cem.retrievePrivlegeExpr(nn("p1")));
}
}

Modified: trunk/procilege/src/test/java/procilege/test/simplecase/PaperLv2007asd.java
==============================================================================
--- trunk/procilege/src/test/java/procilege/test/simplecase/PaperLv2007asd.java (original)
+++ trunk/procilege/src/test/java/procilege/test/simplecase/PaperLv2007asd.java Sat Jun 16 07:53:27 2007
@@ -8,19 +8,20 @@
import procilege.impl.DefaultProcilegeModule;
import procilege.lang.PrivilegeFormAnalysis;
import procilege.test.TestZero;
+import procilege.test.pal.AbstractPalTest;

import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Injector;

-public class PaperLv2007asd {
+public class PaperLv2007asd extends AbstractPalTest {

@Test
public void play() {

// SCENARIO-1
- z.tell("" //
- + "let doc1 is Techdoc \n" //
+ tell("" //
+ + "let doc1 is TechDoc \n" //
+ "reader := (read + list)/TechDoc \n" //
+ "manager := (reader + write + remove)/TechDoc \n" //
+ "bob := reader \n" //
@@ -29,43 +30,29 @@
);

// SCENARIO-2
- z.tell("" //
+ tell("" //
+ "session1 := bob * phone \n" //
+ "session2 := may * phone \n" //
);

// SCENARIO-3
- z.tell(""//
+ tell(""//
+ "readGuard := readGuard * [session1 *~ read/doc1] \n" //
);
-
- //z.print(z.ln("readGuard"), z.ln("session1"));
- pfa.normlize(z.ln("p"));
- assertTrue(z.available(z.ln("readGuard")));
+
+ dumpHistory(0, 100);
+
+ assertTrue(pfa.available(pfa.privform(nn("readGuard"))));

// SCENARIO-4
- z.tell(""//
+ tell(""//
+ "doc1 := readable + writable \n"
+ "writeGuard := writeGuard * [session2 *~ write/doc1] \n"
+ "writableGuard := writableGuard * [doc1 *~ writable] \n"
+ "interaction1 := writeGuard + writableGuard \n");
- z.print(z.ln("session2"), z.ln("doc1"), z.ln("interaction1"));
- assertTrue(z.available(z.ln("interaction1")));
-
- }
-
- @Inject
- private TestZero z;
-
- @Inject
- private PrivilegeFormAnalysis pfa;
-
-
- @Before
- public void initProcilege() {
- Injector guice = Guice.createInjector(new DefaultProcilegeModule(),
- TestZero.module());
-
- guice.injectMembers(this);
+
+ dumpHistory(0, 150);
+
+ assertTrue(pfa.available(pfa.privform(nn("interaction1"))));
}
}

Modified: trunk/procilege/src/test/java/procilege/test/simplecase/SimpleCaseTest.java
==============================================================================
--- trunk/procilege/src/test/java/procilege/test/simplecase/SimpleCaseTest.java (original)
+++ trunk/procilege/src/test/java/procilege/test/simplecase/SimpleCaseTest.java Sat Jun 16 07:53:27 2007
@@ -1,127 +1,78 @@
package procilege.test.simplecase;

-import static junit.framework.Assert.assertNotNull;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

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

-import procilege.impl.DefaultProcilegeModule;
-import procilege.lang.PrivilegeForm;
-import procilege.lang.PrivilegeFormAnalysis;
-import procilege.test.TestZero;
import procilege.test.pal.AbstractPalTest;

-import com.google.inject.Guice;
-import com.google.inject.Inject;
-import com.google.inject.Injector;
-
public class SimpleCaseTest extends AbstractPalTest {

@Test
public void playWithoutSubstitution() {

- mvm.give(nm("tc"));
- mvm.stepin();
- try {
-
- tell("let dtn1 is dnotes");
- tell("let dtn2 is dnotes");
-
- tell("let dts1 is dspec");
- tell("let dts2 is dspec");
+ tell("let dtn1 is dnotes");
+ tell("let dtn2 is dnotes");

- tell("let usr2 is manager");
+ tell("let dts1 is dspec");
+ tell("let dts2 is dspec");

- tell("mgr1 := (read + write)/dnotes + read/dspec");
+ tell("let usr2 is manager");

- tell("usr1 := mgr1 + viewer1");
+ tell("mgr1 := (read + write)/dnotes + read/dspec");

- tell("syst := write / dnotes");
+ tell("usr1 := mgr1 + viewer1");

- tell("guard := g0*[principal *~ req ]");
+ tell("syst := write / dnotes");

- tell("req := write/dtn1");
- tell("principal := usr1");
+ tell("guard := g0*[principal *~ req ]");

- // this section for debug
- tell("ss := req * principal");
+ tell("req := write/dtn1");
+ tell("principal := usr1");

- dumpHistory(0, 50);
- PrivilegeForm pf;
- pf = pfa.privform(nn("guard"));
- assertNotNull(pf);
- dumpHistory(0, 50);
- assertTrue(pfa.available(pf));
+ dumpHistory(0, 50);
+ assertTrue(pfa.available(pfa.privform(nn("guard"))));

- z.tell("dept1 := write/dnotes * [usr1 is manager]");
- z.tell("principal := dept1 * usr1");
+ tell("dept1 := write/dnotes * [usr1 is manager]");
+ tell("principal := dept1 * usr1");

- // this section for debug
- z.tell("ss := req * principal");
- z.print(z.ln("ss"), z.ln("principal"), z.ln("req"));
+ assertFalse(pfa.available(pfa.privform(nn("guard"))));

- assertFalse(pfa.available(pfa.privform(z.ln("guard"))));
-
- z.tell("let usr1 is manager");
- assertTrue(pfa.available(pfa.privform(z.ln("guard"))));
- } finally {
- mvm.stepout();
- }
+ tell("let usr1 is manager");
+ assertTrue(pfa.available(pfa.privform(nn("guard"))));
}

@Test
public void playWithSubstitution() {

- z.tell("let dtn1 is dnotes");
- z.tell("let dtn2 is dnotes");
-
- z.tell("let dts1 is dspec");
- z.tell("let dts2 is dspec");
-
- z.tell("let usr2 is manager");
+ tell("let dtn1 is dnotes");
+ tell("let dtn2 is dnotes");

- z.tell("mgr1 := (read + write)/dnotes + read/dspec");
+ tell("let dts1 is dspec");
+ tell("let dts2 is dspec");

- z.tell("usr1 := mgr1 + viewer1");
+ tell("let usr2 is manager");

- z.tell("syst := write / dnotes");
+ tell("mgr1 := (read + write)/dnotes + read/dspec");

- z.tell("guard := g0*[principal *~ req ]");
+ tell("usr1 := mgr1 + viewer1");

- z.tell("req := write/dtn1");
- z.tell("principal := usr1");
+ tell("syst := write / dnotes");

- // this section for debug
- z.tell("ss := req * principal");
+ tell("guard := guard*[principal *~ req ]");

- assertTrue(pfa.available(pfa.privform(z.ln("guard"))));
-
- z.tell("dept1 := write/dnotes * [usr1 is manager]");
- z.tell("principal := dept1 * usr1");
-
- // this section for debug
- z.tell("ss := req * principal");
- z.print(z.ln("ss"), z.ln("principal"), z.ln("req"));
-
- assertFalse(pfa.available(pfa.privform(z.ln("guard"))));
-
- z.tell("let usr1 is manager");
- assertTrue(pfa.available(pfa.privform(z.ln("guard"))));
- }
+ tell("req := write/dtn1");
+ tell("principal := usr1");

- @Inject
- private PrivilegeFormAnalysis pfa;
+ assertTrue(pfa.available(pfa.privform(nn("guard"))));

- @Inject
- private TestZero z;
+ tell("dept1 := write/dnotes * [usr1 is manager]");
+ tell("principal := dept1 * usr1");

- @Before
- public void initProcilege() {
- Injector guice = Guice.createInjector(new DefaultProcilegeModule(),
- TestZero.module());
+ assertFalse(pfa.available(pfa.privform(nn("guard"))));

- guice.injectMembers(this);
+ tell("let usr1 is manager");
+ assertTrue(pfa.available(pfa.privform(nn("guard"))));
}
}

Reply all
Reply to author
Forward
0 new messages