Changes in / [21:40d6f625e549:22:45f8b617339e] in lemon-main
- Files:
-
- 3 added
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
.hgignore
r3 r9 6 6 *.o 7 7 .#.* 8 *.log 9 *.lo 10 *.tar.* 8 11 Makefile.in 9 12 aclocal.m4 … … 20 23 lemon/stamp-h2 21 24 doc/Doxyfile 22 lemon/.dirstamp 23 lemon/.libs/* 25 .dirstamp 26 .libs/* 27 .deps/* 24 28 25 29 syntax: regexp 26 html/.* 27 autom4te.cache/.* 28 build-aux/.* 29 objs.*/.* 30 ^doc/html/.* 31 ^autom4te.cache/.* 32 ^build-aux/.* 33 ^objs.*/.* 34 ^test/[a-z_]*$ -
lemon/Makefile.am
r8 r10 8 8 9 9 lemon_libemon_la_SOURCES = \ 10 lemon/base.cc 10 lemon/base.cc \ 11 lemon/random.cc 12 11 13 12 14 lemon_libemon_la_CXXFLAGS = $(GLPK_CFLAGS) $(CPLEX_CFLAGS) $(SOPLEX_CXXFLAGS) … … 15 17 lemon_HEADERS += \ 16 18 lemon/dim2.h \ 19 lemon/random.h \ 17 20 lemon/list_graph.h \ 18 21 lemon/tolerance.h -
lemon/bits/invalid.h
r7 r13 25 25 namespace lemon { 26 26 27 /// \brief Dummy type to make it easier to make invalid iterators.27 /// \brief Dummy type to make it easier to create invalid iterators. 28 28 /// 29 29 /// See \ref INVALID for the usage. … … 35 35 }; 36 36 37 /// Invalid iterators.38 37 /// \brief Invalid iterators. 38 /// 39 39 /// \ref Invalid is a global type that converts to each iterator 40 40 /// in such a way that the value of the target iterator will be invalid. -
lemon/dim2.h
r8 r15 35 35 /// the rectangular bounding box of a set of 36 36 /// \ref lemon::dim2::Point "dim2::Point"'s. 37 ///38 ///\author Attila Bernath39 40 37 41 38 namespace lemon { … … 63 60 typedef T Value; 64 61 65 ///First co -ordinate62 ///First coordinate 66 63 T x; 67 ///Second co -ordinate64 ///Second coordinate 68 65 T y; 69 66 … … 76 73 ///The dimension of the vector. 77 74 78 ///Th is class give back always 2.79 /// 75 ///The dimension of the vector. 76 ///This function always returns 2. 80 77 int size() const { return 2; } 81 78 … … 139 136 } 140 137 141 ///Return the neg of the vectors138 ///Return the negative of the vector 142 139 Point<T> operator-() const { 143 140 Point<T> b=*this; … … 176 173 }; 177 174 178 ///Return a nPoint179 180 ///Return a n Point175 ///Return a Point 176 177 ///Return a Point. 181 178 ///\relates Point 182 179 template <typename T> … … 187 184 ///Return a vector multiplied by a scalar 188 185 189 ///Return a vector multiplied by a scalar 186 ///Return a vector multiplied by a scalar. 190 187 ///\relates Point 191 188 template<typename T> Point<T> operator*(const T &u,const Point<T> &x) { … … 195 192 ///Read a plainvector from a stream 196 193 197 ///Read a plainvector from a stream 194 ///Read a plainvector from a stream. 198 195 ///\relates Point 199 196 /// … … 223 220 ///Write a plainvector to a stream 224 221 225 ///Write a plainvector to a stream 222 ///Write a plainvector to a stream. 226 223 ///\relates Point 227 224 /// … … 235 232 ///Rotate by 90 degrees 236 233 237 ///Returns itsparameter rotated by 90 degrees in positive direction.234 ///Returns the parameter rotated by 90 degrees in positive direction. 238 235 ///\relates Point 239 236 /// … … 246 243 ///Rotate by 180 degrees 247 244 248 ///Returns itsparameter rotated by 180 degrees.245 ///Returns the parameter rotated by 180 degrees. 249 246 ///\relates Point 250 247 /// … … 257 254 ///Rotate by 270 degrees 258 255 259 ///Returns itsparameter rotated by 90 degrees in negative direction.256 ///Returns the parameter rotated by 90 degrees in negative direction. 260 257 ///\relates Point 261 258 /// … … 272 269 /// A class to calculate or store the bounding box of plainvectors. 273 270 /// 274 ///\author Attila Bernath275 271 template<typename T> 276 272 class BoundingBox { … … 287 283 ///Construct an instance from two points 288 284 289 ///Construct an instance from two points 290 ///\warning The coordinates of the bottom-left corner must be no more 291 ///than those of the top-right one 285 ///Construct an instance from two points. 286 ///\param a The bottom left corner. 287 ///\param b The top right corner. 288 ///\warning The coordinates of the bottom left corner must be no more 289 ///than those of the top right one. 292 290 BoundingBox(Point<T> a,Point<T> b) 293 291 { … … 299 297 ///Construct an instance from four numbers 300 298 301 ///Construct an instance from four numbers 302 ///\warning The coordinates of the bottom-left corner must be no more 303 ///than those of the top-right one 299 ///Construct an instance from four numbers. 300 ///\param l The left side of the box. 301 ///\param b The bottom of the box. 302 ///\param r The right side of the box. 303 ///\param t The top of the box. 304 ///\warning The left side must be no more than the right side and 305 ///bottom must be no more than the top. 304 306 BoundingBox(T l,T b,T r,T t) 305 307 { … … 309 311 } 310 312 311 ///Were any points added? 313 ///Return \c true if the bounding box is empty. 314 315 ///Return \c true if the bounding box is empty (i.e. return \c false 316 ///if at least one point was added to the box or the coordinates of 317 ///the box were set). 318 ///The coordinates of an empty bounding box are not defined. 312 319 bool empty() const { 313 320 return _empty; … … 330 337 331 338 ///Set the bottom left corner. 332 ///It should only be eused for non-empty box.339 ///It should only be used for non-empty box. 333 340 void bottomLeft(Point<T> p) { 334 341 bottom_left = p; … … 346 353 347 354 ///Set the top right corner. 348 ///It should only be eused for non-empty box.355 ///It should only be used for non-empty box. 349 356 void topRight(Point<T> p) { 350 357 top_right = p; … … 362 369 363 370 ///Set the bottom right corner. 364 ///It should only be eused for non-empty box.371 ///It should only be used for non-empty box. 365 372 void bottomRight(Point<T> p) { 366 373 top_right.x = p.x; … … 379 386 380 387 ///Set the top left corner. 381 ///It should only be eused for non-empty box.388 ///It should only be used for non-empty box. 382 389 void topLeft(Point<T> p) { 383 390 top_right.y = p.y; … … 396 403 397 404 ///Set the bottom of the box. 398 ///It should only be eused for non-empty box.405 ///It should only be used for non-empty box. 399 406 void bottom(T t) { 400 407 bottom_left.y = t; … … 412 419 413 420 ///Set the top of the box. 414 ///It should only be eused for non-empty box.421 ///It should only be used for non-empty box. 415 422 void top(T t) { 416 423 top_right.y = t; … … 428 435 429 436 ///Set the left side of the box. 430 ///It should only be e used for non-empty box437 ///It should only be used for non-empty box. 431 438 void left(T t) { 432 439 bottom_left.x = t; … … 444 451 445 452 ///Set the right side of the box. 446 ///It should only be e used for non-empty box453 ///It should only be used for non-empty box. 447 454 void right(T t) { 448 455 top_right.x = t; … … 466 473 467 474 ///Checks whether a point is inside a bounding box 468 bool inside(const Point<T>& u) {475 bool inside(const Point<T>& u) const { 469 476 if (_empty) 470 477 return false; … … 476 483 477 484 ///Increments a bounding box with a point 485 486 ///Increments a bounding box with a point. 487 /// 478 488 BoundingBox& add(const Point<T>& u){ 479 489 if (_empty){ … … 490 500 } 491 501 492 ///Increments a bounding to contain another bounding box 502 ///Increments a bounding box to contain another bounding box 503 504 ///Increments a bounding box to contain another bounding box. 505 /// 493 506 BoundingBox& add(const BoundingBox &u){ 494 507 if ( !u.empty() ){ … … 500 513 501 514 ///Intersection of two bounding boxes 502 BoundingBox operator &(const BoundingBox& u){ 515 516 ///Intersection of two bounding boxes. 517 /// 518 BoundingBox operator&(const BoundingBox& u) const { 503 519 BoundingBox b; 504 b.bottom_left.x=std::max(this->bottom_left.x,u.bottom_left.x); 505 b.bottom_left.y=std::max(this->bottom_left.y,u.bottom_left.y); 506 b.top_right.x=std::min(this->top_right.x,u.top_right.x); 507 b.top_right.y=std::min(this->top_right.y,u.top_right.y); 508 b._empty = this->_empty || u._empty || 509 b.bottom_left.x>top_right.x && b.bottom_left.y>top_right.y; 520 if (this->_empty || u._empty) { 521 b._empty = true; 522 } else { 523 b.bottom_left.x = std::max(this->bottom_left.x,u.bottom_left.x); 524 b.bottom_left.y = std::max(this->bottom_left.y,u.bottom_left.y); 525 b.top_right.x = std::min(this->top_right.x,u.top_right.x); 526 b.top_right.y = std::min(this->top_right.y,u.top_right.y); 527 b._empty = b.bottom_left.x > b.top_right.x || 528 b.bottom_left.y > b.top_right.y; 529 } 510 530 return b; 511 531 } … … 514 534 515 535 516 ///Map of x-coordinates of a dim2::Point<>-map517 518 ///\ingroup maps 519 ///Map of x-coordinates of a dim2::Point<>-map536 ///Map of x-coordinates of a \ref Point "Point"-map 537 538 ///\ingroup maps 539 ///Map of x-coordinates of a \ref Point "Point"-map. 520 540 /// 521 541 template<class M> … … 571 591 ///Returns a \ref ConstXMap class 572 592 573 ///This function just returns a n\ref ConstXMap class.593 ///This function just returns a \ref ConstXMap class. 574 594 /// 575 595 ///\ingroup maps … … 581 601 } 582 602 583 ///Map of y-coordinates of a dim2::Point<>-map603 ///Map of y-coordinates of a \ref Point "Point"-map 584 604 585 605 ///\ingroup maps 586 ///Map of y-coordinates of a dim2::Point<>-map606 ///Map of y-coordinates of a \ref Point "Point"-map. 587 607 /// 588 608 template<class M> … … 600 620 }; 601 621 602 ///Returns a n\ref YMap class603 604 ///This function just returns a n\ref YMap class.622 ///Returns a \ref YMap class 623 624 ///This function just returns a \ref YMap class. 605 625 /// 606 626 ///\ingroup maps … … 638 658 ///Returns a \ref ConstYMap class 639 659 640 ///This function just returns a n\ref ConstYMap class.660 ///This function just returns a \ref ConstYMap class. 641 661 /// 642 662 ///\ingroup maps … … 650 670 651 671 ///\brief Map of the \ref Point::normSquare() "normSquare()" 652 ///of a n\ref Point "Point"-map672 ///of a \ref Point "Point"-map 653 673 /// 654 674 ///Map of the \ref Point::normSquare() "normSquare()" 655 ///of a n \ref Point "Point"-map675 ///of a \ref Point "Point"-map. 656 676 ///\ingroup maps 657 677 /// … … 671 691 ///Returns a \ref NormSquareMap class 672 692 673 ///This function just returns a n\ref NormSquareMap class.693 ///This function just returns a \ref NormSquareMap class. 674 694 /// 675 695 ///\ingroup maps -
lemon/tolerance.h
r7 r16 49 49 ///\sa Tolerance<long double> 50 50 ///\sa Tolerance<int> 51 #if defined __GNUC__ && !defined __STRICT_ANSI__ 51 52 ///\sa Tolerance<long long int> 53 #endif 52 54 ///\sa Tolerance<unsigned int> 55 #if defined __GNUC__ && !defined __STRICT_ANSI__ 53 56 ///\sa Tolerance<unsigned long long int> 57 #endif 54 58 55 59 template<class T> … … 131 135 bool negative(Value a) const { return -_epsilon>a; } 132 136 ///Returns \c true if \c a is \e surely non-zero 133 bool nonZero(Value a) const { return positive(a)||negative(a); } ;137 bool nonZero(Value a) const { return positive(a)||negative(a); } 134 138 135 139 ///@} … … 182 186 bool negative(Value a) const { return -_epsilon>a; } 183 187 ///Returns \c true if \c a is \e surely non-zero 184 bool nonZero(Value a) const { return positive(a)||negative(a); } ;188 bool nonZero(Value a) const { return positive(a)||negative(a); } 185 189 186 190 ///@} … … 233 237 bool negative(Value a) const { return -_epsilon>a; } 234 238 ///Returns \c true if \c a is \e surely non-zero 235 bool nonZero(Value a) const { return positive(a)||negative(a); } ;239 bool nonZero(Value a) const { return positive(a)||negative(a); } 236 240 237 241 ///@} … … 266 270 static bool negative(Value a) { return 0>a; } 267 271 ///Returns \c true if \c a is \e surely non-zero 268 static bool nonZero(Value a) { return a!=0; } ;272 static bool nonZero(Value a) { return a!=0; } 269 273 270 274 ///@} … … 299 303 static bool negative(Value) { return false; } 300 304 ///Returns \c true if \c a is \e surely non-zero 301 static bool nonZero(Value a) { return a!=0; } ;305 static bool nonZero(Value a) { return a!=0; } 302 306 303 307 ///@} … … 333 337 static bool negative(Value a) { return 0>a; } 334 338 ///Returns \c true if \c a is \e surely non-zero 335 static bool nonZero(Value a) { return a!=0;} ;339 static bool nonZero(Value a) { return a!=0;} 336 340 337 341 ///@} … … 366 370 static bool negative(Value) { return false; } 367 371 ///Returns \c true if \c a is \e surely non-zero 368 static bool nonZero(Value a) { return a!=0;} ;372 static bool nonZero(Value a) { return a!=0;} 369 373 370 374 ///@} … … 403 407 static bool negative(Value a) { return 0>a; } 404 408 ///Returns \c true if \c a is \e surely non-zero 405 static bool nonZero(Value a) { return a!=0;} ;409 static bool nonZero(Value a) { return a!=0;} 406 410 407 411 ///@} … … 438 442 static bool negative(Value) { return false; } 439 443 ///Returns \c true if \c a is \e surely non-zero 440 static bool nonZero(Value a) { return a!=0;} ;444 static bool nonZero(Value a) { return a!=0;} 441 445 442 446 ///@} -
test/Makefile.am
r8 r10 4 4 noinst_HEADERS += \ 5 5 test/test_tools.h 6 6 7 7 check_PROGRAMS += \ 8 8 test/dim_test \ 9 test/random_test \ 9 10 test/test_tools_fail \ 10 11 test/test_tools_pass 11 12 12 13 TESTS += $(check_PROGRAMS) 13 14 XFAIL_TESTS += test/test_tools_fail$(EXEEXT) 14 15 15 16 test_dim_test_SOURCES = test/dim_test.cc 17 test_random_test_SOURCES = test/random_test.cc 16 18 test_test_tools_fail_SOURCES = test/test_tools_fail.cc 17 19 test_test_tools_pass_SOURCES = test/test_tools_pass.cc -
test/dim_test.cc
r8 r14 23 23 using namespace std; 24 24 using namespace lemon; 25 25 26 int main() 26 27 { 27 28 cout << "Testing classes `dim2::Point' and `dim2::BoundingBox'." << endl; 28 cout << "Testing classes 'dim2::Point' and 'dim2::BoundingBox'." << endl; 29 29 30 30 typedef dim2::Point<int> Point; 31 32 Point seged;33 check( seged.size()==2, "Wrong vector addition");31 32 Point p; 33 check(p.size()==2, "Wrong vector initialization."); 34 34 35 35 Point a(1,2); 36 36 Point b(3,4); 37 check(a[0]==1 && a[1]==2, "Wrong vector initialization."); 37 38 38 check(a[0]==1 && a[1]==2, "Wrong vector addition"); 39 p = a+b; 40 check(p.x==4 && p.y==6, "Wrong vector addition."); 39 41 40 seged = a+b;41 check( seged.x==4 && seged.y==6, "Wrong vector addition");42 p = a-b; 43 check(p.x==-2 && p.y==-2, "Wrong vector subtraction."); 42 44 43 seged = a-b; 44 check(seged.x==-2 && seged.y==-2, "a-b"); 45 46 check(a.normSquare()==5,"Wrong norm calculation"); 47 check(a*b==11, "a*b"); 45 check(a.normSquare()==5,"Wrong vector norm calculation."); 46 check(a*b==11, "Wrong vector scalar product."); 48 47 49 48 int l=2; 50 seged= a*l;51 check( seged.x==2 && seged.y==4, "a*l");49 p = a*l; 50 check(p.x==2 && p.y==4, "Wrong vector multiplication by a scalar."); 52 51 53 seged= b/l;54 check( seged.x==1 && seged.y==2, "b/l");52 p = b/l; 53 check(p.x==1 && p.y==2, "Wrong vector division by a scalar."); 55 54 56 55 typedef dim2::BoundingBox<int> BB; 57 BB doboz1; 58 check(doboz1.empty(), "It should be empty."); 59 60 doboz1.add(a); 61 check(!doboz1.empty(), "It should not be empty."); 62 doboz1.add(b); 56 BB box1; 57 check(box1.empty(), "It should be empty."); 63 58 64 check(doboz1.bottomLeft().x==1 && 65 doboz1.bottomLeft().y==2 && 66 doboz1.topRight().x==3 && 67 doboz1.topRight().y==4, 68 "added points to box"); 59 box1.add(a); 60 check(!box1.empty(), "It should not be empty."); 61 box1.add(b); 69 62 70 seged.x=2;seged.y=3; 71 check(doboz1.inside(seged),"It should be inside."); 63 check(box1.bottomLeft().x==1 && 64 box1.bottomLeft().y==2 && 65 box1.topRight().x==3 && 66 box1.topRight().y==4, 67 "Wrong addition of points to box."); 72 68 73 seged.x=1;seged.y=3;74 check( doboz1.inside(seged),"It should be inside.");69 p.x=2; p.y=3; 70 check(box1.inside(p), "It should be inside."); 75 71 76 seged.x=0;seged.y=3;77 check( !doboz1.inside(seged),"It should notbe inside.");72 p.x=1; p.y=3; 73 check(box1.inside(p), "It should be inside."); 78 74 79 BB doboz2(seged); 80 check(!doboz2.empty(), 75 p.x=0; p.y=3; 76 check(!box1.inside(p), "It should not be inside."); 77 78 BB box2(p); 79 check(!box2.empty(), 81 80 "It should not be empty. Constructed from 1 point."); 82 81 83 doboz2.add(doboz1);84 check( doboz2.inside(seged),82 box2.add(box1); 83 check(box2.inside(p), 85 84 "It should be inside. Incremented a box with another one."); 85 86 return 0; 86 87 }
Note: See TracChangeset
for help on using the changeset viewer.