Bug fix & cleanup in config code.
[gem5.git] / test / stattest.cc
index 38a15900d1e06b57d6a7d36de1243fa2b64eb9b0..d0b6916bb5ec4b00a80825113b87508dcb8e8cfa 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003 The Regents of The University of Michigan
+ * Copyright (c) 2003-2004 The Regents of The University of Michigan
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
 
 #include <iomanip>
 #include <iostream>
+#include <fstream>
 #include <string>
 #include <unistd.h>
 
 #include "base/cprintf.hh"
 #include "base/misc.hh"
 #include "base/statistics.hh"
+#include "base/stats/text.hh"
+#include "base/stats/python.hh"
+#include "base/stats/mysql.hh"
 #include "sim/host.hh"
-#include "sim/sim_stats.hh"
 
 using namespace std;
-using namespace Statistics;
+using namespace Stats;
 
 Tick curTick = 0;
 Tick ticksPerSecond = ULL(2000000000);
@@ -46,14 +49,14 @@ Tick ticksPerSecond = ULL(2000000000);
 Scalar<> s1;
 Scalar<> s2;
 Average<> s3;
-Scalar<Counter, MainBin> s4;
-Vector<Counter, MainBin> s5;
-Distribution<Counter, MainBin> s6;
-Vector<> s7;
+Scalar<MainBin> s4;
+Vector<MainBin> s5;
+Distribution<MainBin> s6;
+Vector<MainBin> s7;
 AverageVector<> s8;
 StandardDeviation<> s9;
 AverageDeviation<> s10;
-Scalar<Counter> s11;
+Scalar<> s11;
 Distribution<> s12;
 VectorDistribution<> s13;
 VectorStandardDeviation<> s14;
@@ -63,12 +66,15 @@ Vector2d<> s16;
 Formula f1;
 Formula f2;
 Formula f3;
-Formula f4;
-Formula f5;
+Value f4;
+Value f5;
 Formula f6;
+Formula f7;
 
-MainBin bin1;
-MainBin bin2;
+MainBin bin1("bin1");
+MainBin bin2("bin2");
+
+ostream *outputStream = &cout;
 
 double
 testfunc()
@@ -88,26 +94,57 @@ usage()
 {
     panic("incorrect usage.\n"
           "usage:\n"
-          "\t%s [-v]\n", progname);
+          "\t%s [-p <python file>] [-t [-c] [-d]]\n", progname);
 }
 
 int
 main(int argc, char *argv[])
 {
+    bool descriptions = false;
+    bool compat = false;
+    bool text = false;
+    string pyfile;
+    string mysql_name;
+    string mysql_host;
+    string mysql_user = "binkertn";
+    string mysql_passwd;
+
     char c;
     progname = argv[0];
-    PrintDescriptions = false;
-    while ((c = getopt(argc, argv, "v")) != -1) {
-        cprintf("c == %c\n", c);
+    while ((c = getopt(argc, argv, "cdh:P:p:s:tu:")) != -1) {
         switch (c) {
-          case 'v':
-            PrintDescriptions = true;
+          case 'c':
+            compat = true;
+            break;
+          case 'd':
+            descriptions = true;
+            break;
+          case 'h':
+            mysql_host = optarg;
+            break;
+          case 'P':
+            mysql_passwd = optarg;
+            break;
+          case 'p':
+            pyfile = optarg;
+            break;
+          case 's':
+            mysql_name = optarg;
+            break;
+          case 't':
+            text = true;
+            break;
+          case 'u':
+            mysql_user = optarg;
             break;
           default:
             usage();
         }
     }
 
+    if (!text && (compat || descriptions))
+        usage();
+
     s5.init(5);
     s6.init(1, 100, 13);
     s7.init(7);
@@ -116,7 +153,7 @@ main(int argc, char *argv[])
     s13.init(4, 0, 99, 10);
     s14.init(9);
     s15.init(10);
-    s16.init(2, 2);
+    s16.init(2, 9);
 
     s1
         .name("Stat01")
@@ -132,7 +169,7 @@ main(int argc, char *argv[])
     s3
         .name("Stat03")
         .desc("this is statistic 3")
-        .prereq(s11)
+        .prereq(f7)
         ;
 
     s4
@@ -213,6 +250,8 @@ main(int argc, char *argv[])
         .flags(total)
         .subname(0, "sub0")
         .subname(1, "sub1")
+        .ysubname(0, "y0")
+        .ysubname(1, "y1")
         ;
 
     f1
@@ -240,11 +279,14 @@ main(int argc, char *argv[])
         ;
 
     f4
+        .functor(testfunc)
         .name("Formula4")
         .desc("this is formula 4")
         ;
 
+    TestClass testclass;
     f5
+        .functor(testclass)
         .name("Formula5")
         .desc("this is formula 5")
         ;
@@ -254,24 +296,28 @@ main(int argc, char *argv[])
         .desc("this is formula 6")
         ;
 
-    check();
-
-    MainBin::activate(bin1);
-
     f1 = s1 + s2;
-    f2 = (-s1) / (-s2) * -s3 + ULL(100) + s4;
+    f2 = (-s1) / (-s2) * (-s3 + ULL(100) + s4);
     f3 = sum(s5) * s7;
-    f4 = functor(testfunc);
-    TestClass testclass;
-    f5 = functor(testclass);
     f6 += constant(10.0);
     f6 += s5[3];
+    f7 = constant(1);
+
+    check();
+    reset();
+
+    bin1.activate();
 
     s16[1][0] = 1;
     s16[0][1] = 3;
     s16[0][0] = 2;
     s16[1][1] = 9;
     s16[1][1] += 9;
+    s16[1][8] += 8;
+    s16[1][7] += 7;
+    s16[1][6] += 6;
+    s16[1][5] += 5;
+    s16[1][4] += 4;
 
     s11 = 1;
     s3 = 9;
@@ -452,7 +498,7 @@ main(int argc, char *argv[])
     s6.sample(8);
     s6.sample(9);
 
-    MainBin::activate(bin2);
+    bin2.activate();
     s6.sample(10);
     s6.sample(10);
     s6.sample(10);
@@ -473,6 +519,14 @@ main(int argc, char *argv[])
     s6.sample(99);
     s6.sample(99);
 
+    s7[0] = 700;
+    s7[1] = 600;
+    s7[2] = 500;
+    s7[3] = 400;
+    s7[4] = 300;
+    s7[5] = 200;
+    s7[6] = 100;
+
     s9.sample(100);
     s9.sample(100);
     s9.sample(100);
@@ -493,20 +547,24 @@ main(int argc, char *argv[])
 
     s12.sample(100);
 
-    MainBin::activate(bin1);
-    cout << "dump 1" << endl;
-    dump(cout);
-    cout << endl << endl;
+    if (text) {
+        Text out(cout);
+        out.descriptions = descriptions;
+        out.compat = compat;
+        out();
+    }
 
-    MainBin::activate(bin2);
-    cout << "dump 2" << endl;
-    dump(cout);
-    cout << endl << endl;
+    if (!pyfile.empty()) {
+        Python out(pyfile);
+        out();
+    }
 
-    cout << "dump 3" << endl;
-    reset();
-    dump(cout);
-    cout << endl << endl;
+    if (!mysql_name.empty()) {
+        MySql out;
+        out.connect(mysql_host, mysql_user, mysql_passwd, "m5stats",
+                    mysql_name, "test");
+        out();
+    }
 
     return 0;
 }