[Aptitude-devel] r2950 - branches/aptitude-0.3/aptitude/src/generic/problemresolver

Daniel Burrows dburrows@costa.debian.org
Fri, 08 Apr 2005 03:30:54 +0000


Author: dburrows
Date: Fri Apr  8 03:30:53 2005
New Revision: 2950

Modified:
   branches/aptitude-0.3/aptitude/src/generic/problemresolver/test.cc
   branches/aptitude-0.3/aptitude/src/generic/problemresolver/test1.txt
Log:
Proper conflicts support in test files.

Modified: branches/aptitude-0.3/aptitude/src/generic/problemresolver/test.cc
==============================================================================
--- branches/aptitude-0.3/aptitude/src/generic/problemresolver/test.cc	(original)
+++ branches/aptitude-0.3/aptitude/src/generic/problemresolver/test.cc	Fri Apr  8 03:30:53 2005
@@ -512,6 +512,22 @@
   /** Indexes packages by name. */
   map<string, dummy_package *> packages_by_name;
 
+  struct compare_dummy_packages
+  {
+    bool operator()(dummy_package *p1, dummy_package *p2)
+    {
+      return p1->get_id() < p2->get_id();
+    }
+  };
+
+  struct compare_dummy_versions
+  {
+    bool operator()(dummy_version *v1, dummy_version *v2)
+    {
+      return v1->get_id() < v2->get_id();
+    }
+  };
+
 public:
   virtual ~dummy_universe()
   {
@@ -557,7 +573,8 @@
    *  this is string-based.
    */
   void add_dep(string pkg_name, string pkg_ver,
-	       const vector<pair<string, string> > &target_names)
+	       const vector<pair<string, string> > &target_names,
+	       bool is_conflict)
   {
     map<string, dummy_package *>::const_iterator pfound=packages_by_name.find(pkg_name);
 
@@ -566,7 +583,8 @@
 
     dummy_package *pkg=pfound->second;
 
-    vector<dummy_version *> targets;
+    set<dummy_version *, compare_dummy_versions> targets;
+    set<dummy_package *, compare_dummy_packages> packages;
 
     for(vector<pair<string, string> >::const_iterator i=target_names.begin();
 	i!=target_names.end(); ++i)
@@ -575,14 +593,34 @@
 	if(pfound == packages_by_name.end())
 	  throw NoSuchNameError("package", i->first);
 
-	targets.push_back(pfound->second->version_from_name(i->second));
+	packages.insert(pfound->second);
+	targets.insert(pfound->second->version_from_name(i->second));
+      }
+
+    if(!is_conflict)
+      deps.push_back(new dummy_dep(pkg->version_from_name(pkg_ver),
+				   vector<dummy_version *>(targets.begin(), targets.end()),
+				   deps.size()));
+    else
+      {
+	set<dummy_version *> targets2;
+
+	for(set<dummy_package *>::const_iterator i=packages.begin();
+	    i!=packages.end(); ++i)
+	  for(dummy_package::version_iterator j=(*i)->versions_begin();
+	      j!=(*i)->versions_end(); ++j)
+	    if(targets.find(*j)==targets.end())
+	      targets2.insert(*j);
+
+	deps.push_back(new dummy_dep(pkg->version_from_name(pkg_ver),
+				     vector<dummy_version *>(targets2.begin(), targets2.end()),
+				     deps.size()));
       }
 
-    deps.push_back(new dummy_dep(pkg->version_from_name(pkg_ver), targets, deps.size()));
     dummy_dep *newdep=deps.back();
 
-    for(vector<dummy_version *>::const_iterator i=targets.begin();
-	i!=targets.end(); ++i)
+    for(dummy_dep::solver_iterator i=newdep->solvers_begin();
+	i!=newdep->solvers_end(); ++i)
       (*i)->add_revdep(newdep);
   }
 
@@ -787,7 +825,8 @@
 		throw ParseError("Unexpected EOF in dependency target list following package "+pkgname+" version "+vername);
 	    }
 
-	  rval->add_dep(source.first, source.second, targets);
+	  rval->add_dep(source.first, source.second, targets,
+			is_conflict);
 	}
     }
 

Modified: branches/aptitude-0.3/aptitude/src/generic/problemresolver/test1.txt
==============================================================================
--- branches/aptitude-0.3/aptitude/src/generic/problemresolver/test1.txt	(original)
+++ branches/aptitude-0.3/aptitude/src/generic/problemresolver/test1.txt	Fri Apr  8 03:30:53 2005
@@ -11,7 +11,7 @@
 DEP p2 v1 -> < p3 v1  p3 v2  p3 v3 >
 DEP p2 v2 -> < p3 v1  p3 v2  p3 v3 >
 
-DEP p2 v3 !! < p1 v2  p1 v3 >
+DEP p2 v1 !! < p1 v2  p1 v3 >
 
 
 DEP p3 v1 -> < p4 v1  p4 v2  p4 v3 >