You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jv...@apache.org on 2008/06/01 20:05:15 UTC
svn commit: r662257 - in /maven/sandbox/trunk/mercury: ./ lib/
src/main/java/org/apache/maven/mercury/metadata/
src/test/java/org/apache/maven/mercury/metadata/sat/
Author: jvanzyl
Date: Sun Jun 1 11:05:15 2008
New Revision: 662257
URL: http://svn.apache.org/viewvc?rev=662257&view=rev
Log:
MARTIFACT-20: Starting out use the SAT solver to resolve version ranges
Submitted by: Oleg Gusakov
Added:
maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/sat/
maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/sat/SatFeedTest.java (with props)
Modified:
maven/sandbox/trunk/mercury/lib/install.sh
maven/sandbox/trunk/mercury/pom.xml
maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/ArtifactMetadata.java
maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataTreeNode.java
Modified: maven/sandbox/trunk/mercury/lib/install.sh
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/lib/install.sh?rev=662257&r1=662256&r2=662257&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/lib/install.sh (original)
+++ maven/sandbox/trunk/mercury/lib/install.sh Sun Jun 1 11:05:15 2008
@@ -1,2 +1,2 @@
mvn install:install-file -Dfile=org.sat4j.core.jar -DgroupId=org.sat4j -Dpackaging=jar -DartifactId=org.sat4j.core -Dversion=2.0.0.v20080430 -DgeneratePom=true -DgenerateChecksum=true
-mvn install:install-file -Dfile=org.sat4j.core.jar -DgroupId=org.sat4j -Dpackaging=jar -DartifactId=org.sat4j.pb -Dversion=2.0.0.v20080430 -DgeneratePom=true -DgenerateChecksum=true
+mvn install:install-file -Dfile=org.sat4j.pb.jar -DgroupId=org.sat4j -Dpackaging=jar -DartifactId=org.sat4j.pb -Dversion=2.0.0.v20080430 -DgeneratePom=true -DgenerateChecksum=true
Modified: maven/sandbox/trunk/mercury/pom.xml
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/pom.xml?rev=662257&r1=662256&r2=662257&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/pom.xml (original)
+++ maven/sandbox/trunk/mercury/pom.xml Sun Jun 1 11:05:15 2008
@@ -75,6 +75,7 @@
</execution>
</executions>
</plugin>
+ <!--
<plugin>
<groupId>com.google.code.maven-license-plugin</groupId>
<artifactId>maven-license-plugin</artifactId>
@@ -89,6 +90,7 @@
<useDefaultMapping>true</useDefaultMapping>
</configuration>
</plugin>
+ -->
</plugins>
</build>
<dependencies>
Modified: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/ArtifactMetadata.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/ArtifactMetadata.java?rev=662257&r1=662256&r2=662257&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/ArtifactMetadata.java (original)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/ArtifactMetadata.java Sun Jun 1 11:05:15 2008
@@ -51,6 +51,42 @@
/** error message */
private String error;
+ //------------------------------------------------------------------
+ /**
+ * group:artifact:version:classifier:packaging
+ */
+ public ArtifactMetadata( String name )
+ {
+ if( name == null )
+ return;
+
+ String [] tokens = name.split(":");
+
+ if( tokens == null || tokens.length < 1 )
+ return;
+
+ int count = tokens.length;
+
+ this.groupId = nullify( tokens[0] );
+
+ if( count > 1 )
+ this.artifactId = nullify( tokens[1] );
+
+ if( count > 2 )
+ this.version = nullify( tokens[2] );
+
+ if( count > 3 )
+ this.classifier = nullify( tokens[3] );
+
+ if( count > 4 )
+ this.type = nullify( tokens[4] );
+ }
+ private static final String nullify( String s )
+ {
+ if( s == null || s.length() < 1 )
+ return null;
+ return s;
+ }
public ArtifactMetadata( String groupId, String name, String version )
{
this( groupId, name, version, null );
Modified: maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataTreeNode.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataTreeNode.java?rev=662257&r1=662256&r2=662257&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataTreeNode.java (original)
+++ maven/sandbox/trunk/mercury/src/main/java/org/apache/maven/mercury/metadata/MetadataTreeNode.java Sun Jun 1 11:05:15 2008
@@ -11,35 +11,55 @@
public class MetadataTreeNode
{
- ArtifactMetadata md; // this node
+ ArtifactMetadata md; // this node
- MetadataTreeNode parent; // papa
+ MetadataTreeNode parent; // papa
- /** default # of children. Used for tree creation optimization only */
- int nChildren = 8;
+ /** default # of children. Used for tree creation optimization only */
+ int nChildren = 8;
- MetadataTreeNode[] children; // of cause
-
- public int getNChildren()
- {
- return nChildren;
- }
+ MetadataTreeNode[] children; // of cause
+ //------------------------------------------------------------------------
+ public int countNodes()
+ {
+ return countNodes(this);
+ }
+ //------------------------------------------------------------------------
+ public int countNodes( MetadataTreeNode node )
+ {
+ int res = 1;
+
+ if( children != null && children.length > 0)
+ {
+ for( MetadataTreeNode child : children )
+ {
+ res += countNodes( child );
+ }
+ }
+
+ return res;
+ }
+ //------------------------------------------------------------------------
+ public int getNChildren()
+ {
+ return nChildren;
+ }
+ //------------------------------------------------------------------------
public void setNChildren(int children)
{
nChildren = children;
}
-
//------------------------------------------------------------------------
- public MetadataTreeNode()
- {
- }
- //------------------------------------------------------------------------
- public MetadataTreeNode( ArtifactMetadata md,
+ public MetadataTreeNode()
+ {
+ }
+ //------------------------------------------------------------------------
+ public MetadataTreeNode( ArtifactMetadata md,
MetadataTreeNode parent,
boolean resolved,
ArtifactScopeEnum scope )
- {
+ {
if ( md != null )
{
md.setArtifactScope( ArtifactScopeEnum.checkScope(scope) );
Added: maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/sat/SatFeedTest.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/sat/SatFeedTest.java?rev=662257&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/sat/SatFeedTest.java (added)
+++ maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/sat/SatFeedTest.java Sun Jun 1 11:05:15 2008
@@ -0,0 +1,217 @@
+package org.apache.maven.mercury.metadata.sat;
+
+import java.math.BigInteger;
+
+import junit.framework.TestCase;
+
+import org.sat4j.core.Vec;
+import org.sat4j.core.VecInt;
+import org.sat4j.pb.IPBSolver;
+import org.sat4j.pb.SolverFactory;
+import org.sat4j.specs.ContradictionException;
+import org.sat4j.specs.TimeoutException;
+
+/**
+ * @author <a href="oleg@codehaus.org">Oleg Gusakov</a>
+ */
+public class SatFeedTest
+extends TestCase
+{
+ IPBSolver pbSolver;
+
+ int [][] svars = new int [][]
+ {
+ { 1 }
+ , { 2 }
+ };
+ BigInteger [] scoeffs = new BigInteger [] { BigInteger.ONE };
+
+ int [][] vars = new int [][]
+ {
+ { 1, 2, 3 }
+ , { 1, 2, 4 }
+ , { 2, 3, 4 }
+ };
+ BigInteger [] coeffs = new BigInteger [] { BigInteger.ONE, BigInteger.ONE, BigInteger.ONE };
+ //---------------------------------------------------------------
+ @Override
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+ pbSolver = SolverFactory.newEclipseP2(); //.newDefault();
+ pbSolver.setTimeout( 60 );
+// int [] explainVars = new int [] { 0, 1, 2, 3 };
+// pbSolver.setListOfVariablesForExplanation( new VecInt(explainVars) );
+ }
+ //---------------------------------------------------------------
+ private void showRes( String msg )
+ {
+
+ System.out.println("\n---- "+msg+" -------------" );
+ int [] m = pbSolver.model();
+
+ if( m != null )
+ {
+ for( int i=1; i<=pbSolver.nVars(); i++ )
+ System.out.print(" x"+i+"="+pbSolver.model(i) );
+
+ System.out.print( "\nModel: " );
+ for( int i=0; i<m.length; i++ )
+ System.out.print(" "+m[i]);
+ }
+ else
+ System.out.print(" null model :(");
+
+ System.out.println("\n----------------------------");
+ }
+ //---------------------------------------------------------------
+ public void testSimpleFeed()
+ throws ContradictionException, TimeoutException
+ {
+ String title = "x1 is true";
+ pbSolver.newVar(2);
+ // x1 >= 1
+ pbSolver.addPseudoBoolean(
+ new VecInt(svars[0])
+ , new Vec<BigInteger>( scoeffs )
+ , true, new BigInteger("1")
+ );
+ // x2 < 1
+ pbSolver.addPseudoBoolean(
+ new VecInt(svars[1])
+ , new Vec<BigInteger>( scoeffs )
+ , false, new BigInteger("1")
+ );
+
+ boolean satisfiable = pbSolver.isSatisfiable();
+ assert satisfiable : "Cannot find a solution to "+title+" problem";
+ showRes( title );
+ }
+ //---------------------------------------------------------------
+ public void testFeed()
+ throws ContradictionException, TimeoutException
+ {
+ String title = "4 var system";
+ pbSolver.newVar(4);
+ // x1 + x2 + x3 >= 2
+ pbSolver.addPseudoBoolean(
+ new VecInt(vars[0])
+ , new Vec<BigInteger>( coeffs )
+ , true, new BigInteger("2")
+ );
+ // x1 + x2 + x4 >= 2
+ pbSolver.addPseudoBoolean(
+ new VecInt(vars[1])
+ , new Vec<BigInteger>( coeffs )
+ , true, new BigInteger("2")
+ );
+ // x2 + x3 + x4 < 2
+ pbSolver.addPseudoBoolean(
+ new VecInt(vars[2])
+ , new Vec<BigInteger>( coeffs )
+ , false, new BigInteger("2")
+ );
+
+ boolean satisfiable = pbSolver.isSatisfiable();
+ assert satisfiable : "Cannot find a solution to "+title+" problem";
+ showRes( title );
+ }
+ //---------------------------------------------------------------
+ public void testEqalityFeed()
+ throws ContradictionException, TimeoutException
+ {
+ String title = "Equality";
+ pbSolver.newVar(2);
+ // atleast( 1, {x1,x2} )
+ // x1+x2 >= 1
+ pbSolver.addPseudoBoolean(
+ SatHelper.getSmallOnes( 1, 2 )
+ , SatHelper.getBigOnes(2)
+ , true, new BigInteger("1")
+ );
+ // atmost( 1 ,{x1,x2} )
+ // (1-x1) + (1-x2) >= (2-1)=1
+ // 2-x1-x2 >= 1
+ // -x1-x2 >= -1
+ pbSolver.addPseudoBoolean(
+ SatHelper.getSmallOnes( 1, 2 )
+ , SatHelper.getBigOnes( 2, true )
+ , true, new BigInteger("-1")
+ );
+
+ boolean satisfiable = pbSolver.isSatisfiable();
+ assert satisfiable : "Cannot find a solution to "+title+" problem";
+ showRes( title );
+ }
+ //---------------------------------------------------------------
+ public void testEqality3Feed()
+ throws ContradictionException, TimeoutException
+ {
+ String title = "Equality 3 vars";
+ pbSolver.newVar(3);
+ // atleast( 1, {x1,x2,x3} )
+ // x1+x2 >= 1
+ pbSolver.addPseudoBoolean(
+ SatHelper.getSmallOnes( 1, 2, 3 )
+ , SatHelper.getBigOnes(3)
+ , true, new BigInteger("1")
+ );
+ // atmost( 1 ,{x1,x2} )
+ // (1-x1) + (1-x2) >= (2-1)=1
+ // 2-x1-x2 >= 1
+ // -x1-x2 >= -1
+ pbSolver.addPseudoBoolean(
+ SatHelper.getSmallOnes( 1, 2, 3 )
+ , SatHelper.getBigOnes( 3, true )
+ , true, new BigInteger("-1")
+ );
+
+ boolean satisfiable = pbSolver.isSatisfiable();
+ assert satisfiable : "Cannot find a solution to "+title+" problem";
+ showRes( title );
+ }
+ //---------------------------------------------------------------
+ public void testEqality4Feed()
+ throws ContradictionException, TimeoutException
+ {
+ String title = "Equality 4 vars";
+ pbSolver.newVar(4);
+ pbSolver.addPseudoBoolean(
+ SatHelper.getSmallOnes( 1, 2, 3, 4 )
+ , SatHelper.getBigOnes(4)
+ , true, new BigInteger("1")
+ );
+ pbSolver.addPseudoBoolean(
+ SatHelper.getSmallOnes( 1, 2, 3, 4 )
+ , SatHelper.getBigOnes( 4, true )
+ , true, new BigInteger("-1")
+ );
+
+ boolean satisfiable = pbSolver.isSatisfiable();
+ assert satisfiable : "Cannot find a solution to "+title+" problem";
+ showRes( title );
+ }
+ //---------------------------------------------------------------
+ public void testEqalityRealFeed()
+ throws ContradictionException, TimeoutException
+ {
+ String title = "Equality Real problem";
+ pbSolver.newVar(4);
+ pbSolver.addPseudoBoolean(
+ SatHelper.getSmallOnes( 1, 2, 3, 4 )
+ , SatHelper.getBigOnes(4)
+ , true, new BigInteger("1")
+ );
+ pbSolver.addPseudoBoolean(
+ SatHelper.getSmallOnes( 1, 2, 3, 4 )
+ , SatHelper.getBigOnes( 4, true )
+ , true, new BigInteger("-1")
+ );
+
+ boolean satisfiable = pbSolver.isSatisfiable();
+ assert satisfiable : "Cannot find a solution to "+title+" problem";
+ showRes( title );
+ }
+ //---------------------------------------------------------------
+ //---------------------------------------------------------------
+}
Propchange: maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/sat/SatFeedTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/trunk/mercury/src/test/java/org/apache/maven/mercury/metadata/sat/SatFeedTest.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"