예제 #1
0
int main(int argc) {
  bool chat = argc>1;
  TvpiVar ident[] = {0,1,2 };
  DenseTvpi<true> dom;
  DomVar x = dom.createVariable();
  DomVar y = dom.createVariable();
  DomVar z = dom.createVariable();
  Point xzA = Point(8,-2);
  Point xzB = Point(8,1);
  Point xzC = Point(7,5);
  Point xzD = Point(6,7);
  Point xzE = Point(5,7);
  Point xzF = Point(2,8);
  Point xzG = Point(0,8);
  Point yzA = Point(0,-7);
  Point yzB = Point(2,-7);
  Point yzC = Point(4,-7);
  Point yzD = Point(6,-6);
  Point yzE = Point(7,-5);
  Point yzF = Point(8,-2);
  Point yzG = Point(8,2);
  Inequality* eqsXZ[] = {
    //new Inequality(xzA, xzB),
    new Inequality(xzB, xzD),
    new Inequality(xzC, xzF),
    new Inequality(xzE, xzG),
    0
  };
  Inequality* eqsYZ[] = {
    new Inequality(yzA, yzD),
    new Inequality(yzB, yzE),
    new Inequality(yzC, yzF),
    0,//new Inequality(yzF, yzG),
  };
  dom.addInequalities(x,z, 3, eqsXZ);
  if (chat) cout << "Before:" << endl << dom;
  dom.addInequalities(y,z, 3, eqsYZ);
  if (chat) cout << "After:" << endl << dom;
  if (chat) cout << "Intersection points:" << endl;
  Polyhedron<true> xyP = dom.getProjection(x,y);
  if (chat) for(size_t i=0; i+1<xyP.getNoOfInequalities(); i++)
    cout << Point(*xyP[i], *xyP[i+1]) << endl;

  // The point <8,10,-> is not entailed in the closure.
  DenseTvpi<true> dom2;
  dom2.createVariable(8);
  dom2.createVariable(10);
  dom2.createVariable();
  if (chat) cout << "Testing:" << endl << dom2;
  bool correct=!dom.includes(dom2, ident) && xyP.getNoOfInequalities()==8;
  return !correct;
};
int main() {
  Polyhedron<true> p;
 
  vector<Inequality*> eqs;
  eqs.push_back(new Inequality(-34,55,1));
  Interval<true> xBound;
  xBound.updateUpper(0);
  Interval<true> yBound;
  p.addInequalitySet(xBound, yBound, eqs);
  //cout << "before:\n" << p
  //     << "x in " << xBound << ", y in " << yBound << endl;

  bool correct=p.getNoOfInequalities()==2;

  // Return 1 on error.
  return !correct;
};