Bug fix & cleanup in config code.
[gem5.git] / test / stattest.cc
index 8dd8eeb8e4a3b9937228f5a939036da0c5cd3129..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 "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"
 
 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<Counter, MainBin> 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,14 +66,16 @@ Vector2d<> s16;
 Formula f1;
 Formula f2;
 Formula f3;
-Formula f4;
-Formula f5;
+Value f4;
+Value f5;
 Formula f6;
 Formula f7;
 
 MainBin bin1("bin1");
 MainBin bin2("bin2");
 
+ostream *outputStream = &cout;
+
 double
 testfunc()
 {
@@ -89,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);
@@ -214,6 +250,8 @@ main(int argc, char *argv[])
         .flags(total)
         .subname(0, "sub0")
         .subname(1, "sub1")
+        .ysubname(0, "y0")
+        .ysubname(1, "y1")
         ;
 
     f1
@@ -241,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")
         ;
@@ -258,9 +299,6 @@ main(int argc, char *argv[])
     f1 = s1 + s2;
     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);
@@ -509,9 +547,24 @@ main(int argc, char *argv[])
 
     s12.sample(100);
 
-//    dump(cout, mode_simplescalar);
-    python_start("/tmp/stats.py");
-    python_dump("stattest", "all");
+    if (text) {
+        Text out(cout);
+        out.descriptions = descriptions;
+        out.compat = compat;
+        out();
+    }
+
+    if (!pyfile.empty()) {
+        Python out(pyfile);
+        out();
+    }
+
+    if (!mysql_name.empty()) {
+        MySql out;
+        out.connect(mysql_host, mysql_user, mysql_passwd, "m5stats",
+                    mysql_name, "test");
+        out();
+    }
 
     return 0;
 }