Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

only OnlyConstantPropagation finished #54

Open
wants to merge 74 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
052fb15
Update EnitreSuite.java
RPasch Jul 24, 2018
12729eb
Update EntireSuite.java
RPasch Jul 24, 2018
e344201
Update SATCanonizerTest.java
RPasch Jul 24, 2018
1668157
Update build.xml
RPasch Jul 24, 2018
7c95328
Update EntireSuite.java
RPasch Jul 24, 2018
deb4580
Update EntireSuite.java
RPasch Jul 24, 2018
266494f
Update SATCanonizerTest.java
RPasch Jul 24, 2018
6b2e60d
Update SATCanonizerTest.java
RPasch Jul 24, 2018
98777f8
Update EntireSuite.java
RPasch Jul 24, 2018
a94efc3
Update build.xml
RPasch Jul 24, 2018
fa09bee
Update EntireSuite.java
RPasch Jul 24, 2018
dd72785
Update build.xml
RPasch Jul 24, 2018
3656b42
Update SATCanonizerTest.java
RPasch Jul 24, 2018
cf96b09
Update README.md
RPasch Jul 24, 2018
49ee8fb
Update README.md
RPasch Jul 24, 2018
6fc1e29
Update README.md
RPasch Jul 24, 2018
ccae141
Update README.md
RPasch Jul 24, 2018
29a02eb
Update .travis.yml
RPasch Jul 24, 2018
d7f56ac
Update .travis.yml
RPasch Jul 24, 2018
8ec138e
Update .travis.yml
RPasch Jul 24, 2018
1f8a126
Update .travis.yml
RPasch Jul 24, 2018
04c987a
Update .travis.yml
RPasch Jul 24, 2018
f732bed
Update .travis.yml
RPasch Jul 24, 2018
796023c
Update .travis.yml
RPasch Jul 24, 2018
e9b94f1
Update Dockerfile
RPasch Jul 31, 2018
5628345
Update build.xml
RPasch Aug 12, 2018
feff580
Update EntireSuite.java
RPasch Aug 12, 2018
0634f87
out dated commit
RPasch Aug 12, 2018
3ed7c53
some changes to constantPropogation
RPasch Aug 12, 2018
f0a798f
added a method or two
RPasch Aug 12, 2018
f60f821
another method
RPasch Aug 12, 2018
3d19219
SATcanonizer....
RPasch Aug 12, 2018
1c4fdaa
Post Visit nr1????
RPasch Aug 12, 2018
1c1205b
it is propAgate not propogate...
RPasch Aug 12, 2018
4702af9
Are you going to compile now?
RPasch Aug 12, 2018
dff6060
surely
RPasch Aug 12, 2018
31b5bcc
Update EntireSuite.java
RPasch Aug 12, 2018
62135f7
Update ConstantPropagation.java
RPasch Aug 12, 2018
389dea8
Update build.xml
RPasch Aug 12, 2018
3a38f66
Update ConstantPropagation.java
RPasch Aug 12, 2018
f7fe857
Update ConstantPropagation.java
RPasch Aug 12, 2018
3ad590b
???
RPasch Aug 12, 2018
65f29c5
Update SimplificationConstantPropogationTest.java
RPasch Aug 12, 2018
cd7f8da
Update ConstantPropagation.java
RPasch Aug 12, 2018
c959c35
Update and rename SimplificationConstantPropogationTest.java to Simpl…
RPasch Aug 12, 2018
52b997c
Update and rename OnlyConstantPropogationTest.java to OnlyConstantPro…
RPasch Aug 12, 2018
a0d4f80
Add files via upload
RPasch Aug 12, 2018
ad22b19
Delete OnlyConstantPropagationTest.java
RPasch Aug 12, 2018
172ddb7
Delete SimplificationConstantPropagationTest.java
RPasch Aug 12, 2018
1fcbe43
Update and rename OnlyConstantPropogationTest.java to OnlyConstantPro…
RPasch Aug 12, 2018
7f8f64c
Update and rename SimplificationConstantPropogationTest.java to Simpl…
RPasch Aug 12, 2018
2936996
Update and rename SimplificationConstantPropagationTest.java to Simpl…
RPasch Aug 12, 2018
9cbe87e
Update and rename OnlyConstantPropagationTest.java to OnlyConstantPro…
RPasch Aug 12, 2018
1eac2d4
Update EntireSuite.java
RPasch Aug 12, 2018
750039a
Update and rename ConstantPropagation.java to ConstantPropogation.java
RPasch Aug 12, 2018
fc61bd9
Update ConstantPropogation.java
RPasch Aug 12, 2018
f6431e5
Update ConstantPropogation.java
RPasch Aug 12, 2018
7699108
Update ConstantPropogation.java
RPasch Aug 12, 2018
086fcf9
Update ConstantPropogation.java
RPasch Aug 12, 2018
c655b15
Update ConstantPropogation.java
RPasch Aug 12, 2018
dcc7fcd
Update ConstantPropogation.java
RPasch Aug 12, 2018
2c68f0c
Update ConstantPropogation.java
RPasch Aug 12, 2018
9cc543d
Update ConstantPropogation.java
RPasch Aug 12, 2018
3afa438
Update build.xml
RPasch Aug 13, 2018
46f3cb9
Update ConstantPropogation.java
RPasch Aug 13, 2018
c2347db
Update build.xml
RPasch Aug 13, 2018
5d0d4c4
Update ConstantPropogation.java
RPasch Aug 13, 2018
fb83f68
Update EntireSuite.java
RPasch Aug 13, 2018
cf851cf
Update EntireSuite.java
RPasch Aug 13, 2018
72b7191
Update EntireSuite.java
RPasch Aug 13, 2018
d9d901f
Update ConstantPropogation.java
RPasch Aug 13, 2018
ea51c9c
Update ConstantPropogation.java
RPasch Aug 13, 2018
bee3ec9
Update ConstantPropogation.java
RPasch Aug 13, 2018
5362d68
Update ConstantPropogation.java
RPasch Aug 13, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 11 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
sudo: required

language: java

services:
- docker

before_install:
- docker build -t carlad/sinatra .


script:
- ant;
- ant test;
- docker run carlad/sinatra /bin/sh -c "ant; ant test;"
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ RUN apt install patchelf -y
RUN apt install libgomp1

# Clone down the GreenSolver repository
RUN git clone https://github.com/wvisser/green
RUN git clone https://github.com/RPasch/green

# Download and extract Z3
RUN mkdir z3
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
[![Build Status](https://travis-ci.org/wvisser/green.svg?branch=master)](https://travis-ci.org/wvisser/green.svg?branch=master)
[![Build Status](https://travis-ci.org/RPasch/green.svg?branch=master)](https://travis-ci.org/RPasch/green.svg?branch=master)

Notes:

Expand Down
2 changes: 1 addition & 1 deletion build.xml
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@
<echo message="java.library.path = ${z3lib};${cvc3lib}"/>
<mkdir dir="${junit.dir}"/>
<junit fork="yes" printsummary="withOutAndErr" haltonfailure = "yes">
<formatter type="plain" usefile="false"/>
<formatter type="xml"/>
<test name="za.ac.sun.cs.green.EntireSuite" todir="${junit.dir}"/>
<env key="DYLD_LIBRARY_PATH" value="lib"/>
Expand All @@ -110,7 +111,6 @@
<report format="frames" todir="${junit.dir}"/>
</junitreport>
</target>

<!--
TARGET: package
-->
Expand Down
194 changes: 194 additions & 0 deletions src/za/ac/sun/cs/green/service/simplify/ConstantPropogation.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,194 @@
package za.ac.sun.cs.green.service.simplify;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
import java.util.SortedSet;
import java.util.Stack;
import java.util.TreeMap;
import java.util.TreeSet;
import java.util.logging.Level;

import za.ac.sun.cs.green.Instance;
import za.ac.sun.cs.green.Green;
import za.ac.sun.cs.green.expr.Expression;
import za.ac.sun.cs.green.expr.Variable;
import za.ac.sun.cs.green.expr.Visitor;
import za.ac.sun.cs.green.expr.VisitorException;
import za.ac.sun.cs.green.service.BasicService;
import za.ac.sun.cs.green.util.Reporter;
import za.ac.sun.cs.green.expr.Constant;
import za.ac.sun.cs.green.expr.IntConstant;
import za.ac.sun.cs.green.expr.IntVariable;
import za.ac.sun.cs.green.expr.Operation;

public class ConstantPropogation extends BasicService {


private int invocations = 0;

public ConstantPropogation(Green solver) {
super(solver);
}

@Override
public Set<Instance> processRequest(Instance instance) {
@SuppressWarnings("unchecked")
Set<Instance> result = (Set<Instance>) instance.getData(getClass());
if (result == null) {
final Map<Variable, Variable> map = new HashMap<Variable, Variable>();
final Expression e = propagateConstants(instance.getFullExpression(), map);
final Instance i = new Instance(getSolver(), instance.getSource(), null, e);
final Instance f = new Instance(getSolver(), instance.getSource(), null , e);
result = Collections.singleton(i);
instance.setData(getClass(), result);
}
return result;
}

@Override
public void report(Reporter reporter) {
reporter.report(getClass().getSimpleName(), "invocations = " + invocations);
}

public Expression propagateConstants(Expression expr, Map<Variable, Variable> map) {
try {
log.log(Level.FINEST, "Before Constant Propagation: " + expr);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please make use of the same coding convention adhered to in the original repo.

invocations++;
cPvisitor cPv = new cPvisitor();
cPvisitor cpVVtest = new cPvisitor();
expr.accept(cPv);
Expression propTest;
Expression prop = cPv.getExpression();
log.log(Level.FINEST, "After Constant Propagation: " + prop);
return prop;
} catch (VisitorException ex) {
log.log(Level.SEVERE, "Something is not right.", ex);
}

return null;
}



private static class cPvisitor extends Visitor {
private Stack<Expression> stack;
private Stack<Expression> stackyMcStackStack;
private Map<IntVariable, IntConstant> Vmap;
private Map<IntVariable , IntConstant> mappy;

public cPvisitor() {
stack = new Stack<Expression>();
stackyMcStackStack = new Stack<Expression>();
Vmap = new TreeMap<IntVariable, IntConstant>();
mappy = new TreeMap<IntVariable , IntConstant>();
}

public Expression getExpression() {
Expression ex = null;
if(stack.isEmpty()){
return null;

}else{
ex = stack.pop();

}
return ex;
}

@Override
public void postVisit(Constant cons) {
if(cons instanceof IntConstant){
stack.push(cons);
stackyMcStackStack.push(cons);
} else {

stack.clear();
stackyMcStackStack.clear();
}


}

@Override
public void postVisit(Variable var) {
if(var instanceof IntVariable){
stack.push(var);
stackyMcStackStack.push(var);
} else {
stack.clear();
stackyMcStackStack.clear();
}


}

@Override
public void postVisit(Operation operation) throws VisitorException {
Operation.Operator op = operation.getOperator();
Operation.Operator nop = null;
switch (op) {
case EQ:
nop = Operation.Operator.EQ;
break;
case NE:
nop = Operation.Operator.NE;
break;
case LT:
nop = Operation.Operator.GT;
break;
case LE:
nop = Operation.Operator.GE;
break;
case GT:
nop = Operation.Operator.LT;
break;
case GE:
nop = Operation.Operator.LE;
break;
default:
break;
}
if (nop != null) {
if(stackyMcStackStack.size()>=2){
Expression rR = stackyMcStackStack.pop();
Expression lL = stackyMcStackStack.pop();
if((lL instanceof IntVariable) && (rR instanceof IntConstant)){
mappy.put((IntVariable)lL ,(IntConstant) rR);
}else if((rR instanceof IntVariable) && (lL instanceof IntConstant)){
mappy.put((IntVariable)rR,(IntConstant)lL);
}
}
}


if(stack.size()>=2){
Expression r = stack.pop();
Expression l = stack.pop();
Operation.Operator oper = op;
if(oper.equals(Operation.Operator.EQ)){
if((l instanceof IntVariable) && (r instanceof IntConstant)){
Vmap.put((IntVariable)l ,(IntConstant) r);
}else if((r instanceof IntVariable) && (l instanceof IntConstant)){
Vmap.put((IntVariable)r,(IntConstant)l);
}
stack.push(new Operation(oper,l,r));
} else if(!oper.equals(Operation.Operator.EQ)){

if (Vmap.containsKey(l)) {
l = Vmap.get(l);
} else if(Vmap.containsKey(r)){
r = Vmap.get(r);
}
stack.push(new Operation(oper , l , r));
}
}
}
//return null;
}

}


13 changes: 9 additions & 4 deletions test/za/ac/sun/cs/green/EntireSuite.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@
import org.junit.runners.Suite;

import com.microsoft.z3.Context;

import za.ac.sun.cs.green.service.simplify.OnlyConstantPropogationTest;
import za.ac.sun.cs.green.service.simplify.SimplificationConstantPropogationTest;
import cvc3.ValidityChecker;
import za.ac.sun.cs.green.parser.smtlib2.SMTLIB2Parser0Test;
import za.ac.sun.cs.green.parser.smtlib2.SMTLIB2Scanner0Test;
Expand All @@ -32,11 +33,14 @@
import za.ac.sun.cs.green.util.ParallelSATTest;
import za.ac.sun.cs.green.util.SetServiceTest;
import za.ac.sun.cs.green.util.SetTaskManagerTest;
import za.ac.sun.cs.green.service.simplify.OnlyConstantPropogationTest;

@RunWith(Suite.class)
@Suite.SuiteClasses({
SATCanonizerTest.class,
SATZ3Test.class
//SATCanonizerTest.class,
//SATZ3Test.class
OnlyConstantPropogationTest.class,
//SimplificationConstantPropogationTest.class
})

public class EntireSuite {
Expand Down Expand Up @@ -67,7 +71,8 @@ public class EntireSuite {
barvinok = p.getProperty("barvinokpath");
z3 = p.getProperty("z3path");
} catch (IOException e) {
// do nothing
//do nothing

}
}
LATTE_PATH = latte;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -293,15 +293,15 @@ public void test19() {
Operation o1 = new Operation(Operation.Operator.LE, c1, c1);
check(o1, "2<=2", "0==0");
}
/*

@Test
public void test20() {
IntConstant c1 = new IntConstant(2);
IntVariable v1 = new IntVariable("aa", 0, 99);
Operation o1 = new Operation(Operation.Operator.LE, c1, c1);
Operation o2 = new Operation(Operation.Operator.LT, v1, c1);
Operation o3 = new Operation(Operation.Operator.AND, o1, o2);
check(o3, "(2<=2)&&(aa<2)", "1*v+-1<0");
check(o3, "(2<=2)&&(aa<2)", "1*v+-1<=0");
}
*/

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package za.ac.sun.cs.green.service.simplify;

import static org.junit.Assert.*;

import java.util.Arrays;
import java.util.Properties;
import java.util.SortedSet;
import java.util.TreeSet;

import org.junit.BeforeClass;
import org.junit.Test;

import za.ac.sun.cs.green.Instance;
import za.ac.sun.cs.green.Green;
import za.ac.sun.cs.green.expr.Expression;
import za.ac.sun.cs.green.expr.IntConstant;
import za.ac.sun.cs.green.expr.IntVariable;
import za.ac.sun.cs.green.expr.Operation;
import za.ac.sun.cs.green.util.Configuration;

public class OnlyConstantPropogationTest {

public static Green solver;

@BeforeClass
public static void initialize() {
solver = new Green();
Properties props = new Properties();
props.setProperty("green.services", "sat");
props.setProperty("green.service.sat", "(simplify sink)");
//props.setProperty("green.service.sat", "(canonize sink)");
props.setProperty("green.service.sat.simplify",
"za.ac.sun.cs.green.service.simplify.ConstantPropogation");
//props.setProperty("green.service.sat.canonize",
// "za.ac.sun.cs.green.service.canonizer.SATCanonizerService");

props.setProperty("green.service.sat.sink",
"za.ac.sun.cs.green.service.sink.SinkService");
Configuration config = new Configuration(solver, props);
config.configure();
}

private void finalCheck(String observed, String expected) {
assertEquals(expected, observed);
}

private void check(Expression expression, String expected) {
Instance i = new Instance(solver, null, null, expression);
Expression e = i.getExpression();
assertTrue(e.equals(expression));
assertEquals(expression.toString(), e.toString());
Object result = i.request("sat");
assertNotNull(result);
assertEquals(Instance.class, result.getClass());
Instance j = (Instance) result;
finalCheck(j.getExpression().toString(), expected);
}

@Test
public void test00() {
IntVariable x = new IntVariable("x", 0, 99);
IntVariable y = new IntVariable("y", 0, 99);
IntVariable z = new IntVariable("z", 0, 99);
IntConstant c = new IntConstant(1);
IntConstant c10 = new IntConstant(10);
IntConstant c3 = new IntConstant(3);
Operation o1 = new Operation(Operation.Operator.EQ, x, c); // o1 : x = 1
Operation o2 = new Operation(Operation.Operator.ADD, x, y); // o2 : (x + y)
Operation o3 = new Operation(Operation.Operator.EQ, o2, c10); // o3 : x+y = 10
Operation o4 = new Operation(Operation.Operator.AND, o1, o3); // o4 : x = 1 && (x+y) = 10
check(o4, "(x==1)&&((1+y)==10)");
}

}
Loading