1.1 --- a/test/counter_test.cc Sun Jun 15 22:03:33 2008 +0200
1.2 +++ b/test/counter_test.cc Sun Jun 15 22:05:23 2008 +0200
1.3 @@ -17,50 +17,75 @@
1.4 */
1.5
1.6 #include <lemon/counter.h>
1.7 +#include <vector>
1.8
1.9 -///\file \brief Test cases for time_measure.h
1.10 -///
1.11 -///\todo To be extended
1.12 +using namespace lemon;
1.13
1.14 +template <typename T>
1.15 +void bubbleSort(std::vector<T>& v) {
1.16 + Counter op("Bubble Sort - Operations: ");
1.17 + Counter::NoSubCounter as(op, "Assignments: ");
1.18 + Counter::NoSubCounter co(op, "Comparisons: ");
1.19 + for (int i = v.size()-1; i > 0; --i) {
1.20 + for (int j = 0; j < i; ++j) {
1.21 + if (v[j] > v[j+1]) {
1.22 + T tmp = v[j];
1.23 + v[j] = v[j+1];
1.24 + v[j+1] = tmp;
1.25 + as += 3;
1.26 + }
1.27 + ++co;
1.28 + }
1.29 + }
1.30 +}
1.31
1.32 -int fibonacci(int f)
1.33 -{
1.34 - static lemon::Counter count("Fibonacci steps: ");
1.35 - count++;
1.36 - if(f<1) return 0;
1.37 - else if(f==1) return 1;
1.38 - else return fibonacci(f-1)+fibonacci(f-2);
1.39 +template <typename T>
1.40 +void insertionSort(std::vector<T>& v) {
1.41 + Counter op("Insertion Sort - Operations: ");
1.42 + Counter::NoSubCounter as(op, "Assignments: ");
1.43 + Counter::NoSubCounter co(op, "Comparisons: ");
1.44 + for (int i = 1; i < int(v.size()); ++i) {
1.45 + T value = v[i];
1.46 + ++as;
1.47 + int j = i;
1.48 + while (j > 0 && v[j-1] > value) {
1.49 + v[j] = v[j-1];
1.50 + --j;
1.51 + ++co; ++as;
1.52 + }
1.53 + v[j] = value;
1.54 + ++as;
1.55 + }
1.56 +}
1.57 +
1.58 +template <typename MyCounter>
1.59 +void counterTest() {
1.60 + MyCounter c("Main Counter: ");
1.61 + c++;
1.62 + typename MyCounter::SubCounter d(c, "SubCounter: ");
1.63 + d++;
1.64 + typename MyCounter::SubCounter::NoSubCounter e(d, "SubSubCounter: ");
1.65 + e++;
1.66 + d+=3;
1.67 + c-=4;
1.68 + e-=2;
1.69 + c.reset(2);
1.70 + c.reset();
1.71 +}
1.72 +
1.73 +void init(std::vector<int>& v) {
1.74 + v[0] = 10; v[1] = 60; v[2] = 20; v[3] = 90; v[4] = 100;
1.75 + v[5] = 80; v[6] = 40; v[7] = 30; v[8] = 50; v[9] = 70;
1.76 }
1.77
1.78 int main()
1.79 {
1.80 - fibonacci(10);
1.81 + counterTest<Counter>();
1.82 + counterTest<NoCounter>();
1.83
1.84 - {
1.85 - typedef lemon::Counter MyCounter;
1.86 - MyCounter c("Main counter: ");
1.87 - c++;
1.88 - c++;
1.89 - MyCounter::SubCounter d(c,"Subcounter: ");
1.90 - d++;
1.91 - d++;
1.92 - MyCounter::SubCounter::SubCounter e(d,"SubSubCounter: ");
1.93 - e++;
1.94 - e++;
1.95 - }
1.96 -
1.97 - {
1.98 - typedef lemon::NoCounter MyCounter;
1.99 - MyCounter c("Main counter: ");
1.100 - c++;
1.101 - c++;
1.102 - MyCounter::SubCounter d(c,"Subcounter: ");
1.103 - d++;
1.104 - d++;
1.105 - MyCounter::SubCounter::SubCounter e(d,"SubSubCounter: ");
1.106 - e++;
1.107 - e++;
1.108 - }
1.109 + std::vector<int> x(10);
1.110 + init(x); bubbleSort(x);
1.111 + init(x); insertionSort(x);
1.112
1.113 return 0;
1.114 }