summaryrefslogtreecommitdiffstatsci
path: root/src/caskbench.cpp
diff options
context:
space:
mode:
authorBryce Harrington <b.harrington@samsung.com>2013-10-31 11:00:23 -0700
committerBryce Harrington <b.harrington@samsung.com>2013-10-31 11:00:23 -0700
commit5971648318ffa0c9f8e5ad2817203daff8e6257d (patch)
tree321e0f99bd920f38795688e5e56e2f1fba409d84 /src/caskbench.cpp
parentdffd9a237898c78ce3b1efa864e830f7fb7d50bb (diff)
Add standardized status codes through caskbench_status_t enums
Diffstat (limited to 'src/caskbench.cpp')
-rw-r--r--src/caskbench.cpp122
1 files changed, 79 insertions, 43 deletions
diff --git a/src/caskbench.cpp b/src/caskbench.cpp
index ae83f20..54783f0 100644
--- a/src/caskbench.cpp
+++ b/src/caskbench.cpp
@@ -37,65 +37,56 @@ caskbench_perf_test_t perf_tests[] = {
};
#define NUM_CASES (5)
-double
-get_tick (void)
-{
- struct timeval now;
- gettimeofday (&now, NULL);
- return (double)now.tv_sec + (double)now.tv_usec / 1000000.0;
-}
+typedef enum {
+ CASKBENCH_STATUS_PASS,
+ CASKBENCH_STATUS_FAIL,
+ CASKBENCH_STATUS_ERROR,
+ CASKBENCH_STATUS_CRASH,
+} caskbench_status_t;
-void
-randomize_color(cairo_t *cr)
+static const char *
+_status_to_string(int result)
{
- double red, green, blue, alpha;
-
- red = (double)rand()/RAND_MAX;
- green = (double)rand()/RAND_MAX;
- blue = (double)rand()/RAND_MAX;
- alpha = (double)rand()/RAND_MAX;
-
- cairo_set_source_rgba (cr, red, green, blue, alpha);
+ switch (result) {
+ case CASKBENCH_STATUS_PASS:
+ return "PASS";
+ case CASKBENCH_STATUS_FAIL:
+ return "FAIL";
+ case CASKBENCH_STATUS_ERROR:
+ return "ERROR";
+ case CASKBENCH_STATUS_CRASH:
+ return "CRASH";
+ default:
+ return "unknown";
+ }
}
void
-display_results_json(const caskbench_result_t *result)
-{
- printf(" {\n");
- printf(" \"test case\": \"%s\",\n", result->test_case_name);
- printf(" \"iterations\": %d,\n", result->iterations);
- printf(" \"minimum run time (s)\": %f,\n", result->min_run_time);
- printf(" \"average run time (s)\": %f,\n", result->avg_run_time);
- printf(" \"status\": \"%d\"\n", result->status);
- printf(" }");
-}
-
-int
-main (int argc, char *argv[])
+process_options(caskbench_options_t *opt, int argc, char *argv[])
{
int rc;
- int c, i;
- caskbench_options_t opt;
- double start_time, stop_time, run_time, run_total;
-
poptContext pc;
struct poptOption po[] = {
- {"iterations", 'i', POPT_ARG_INT, &opt.iterations, 0,
+ {"iterations", 'i', POPT_ARG_INT, &opt->iterations, 0,
"The number of times each test case should be run",
NULL},
- {"dry-run", 'n', POPT_ARG_NONE, &opt.dry_run, 0,
+ {"dry-run", 'n', POPT_ARG_NONE, &opt->dry_run, 0,
"Just list the selected test case names without executing",
"num"},
POPT_AUTOHELP
{NULL}
};
+
+ assert(opt);
+
+ // Initialize options
+ opt->dry_run = 0;
+ opt->iterations = 1024;
+
pc = poptGetContext(NULL, argc, (const char **)argv, po, 0);
poptSetOtherOptionHelp(pc, "[ARG...]");
poptReadDefaultConfig(pc, 0);
- opt.dry_run = 0;
- opt.iterations = 1024;
-
while ((rc = poptGetNextOpt(pc)) >= 0) {
printf("%d\n", rc);
}
@@ -116,6 +107,49 @@ main (int argc, char *argv[])
// Remaining args are the tests to be run, or all if this list is empty
const char **tests = poptGetArgs(pc);
+}
+
+double
+get_tick (void)
+{
+ struct timeval now;
+ gettimeofday (&now, NULL);
+ return (double)now.tv_sec + (double)now.tv_usec / 1000000.0;
+}
+
+void
+randomize_color(cairo_t *cr)
+{
+ double red, green, blue, alpha;
+
+ red = (double)rand()/RAND_MAX;
+ green = (double)rand()/RAND_MAX;
+ blue = (double)rand()/RAND_MAX;
+ alpha = (double)rand()/RAND_MAX;
+
+ cairo_set_source_rgba (cr, red, green, blue, alpha);
+}
+
+void
+display_results_json(const caskbench_result_t *result)
+{
+ printf(" {\n");
+ printf(" \"test case\": \"%s\",\n", result->test_case_name);
+ printf(" \"iterations\": %d,\n", result->iterations);
+ printf(" \"minimum run time (s)\": %f,\n", result->min_run_time);
+ printf(" \"average run time (s)\": %f,\n", result->avg_run_time);
+ printf(" \"status\": \"%s\"\n", _status_to_string(result->status));
+ printf(" }");
+}
+
+int
+main (int argc, char *argv[])
+{
+ int c, i;
+ caskbench_options_t opt;
+ double start_time, stop_time, run_time, run_total;
+
+ process_options(&opt, argc, argv);
// TODO: Open output file
// start json
@@ -140,7 +174,7 @@ main (int argc, char *argv[])
if (perf_tests[c].setup != NULL)
if (!perf_tests[c].setup(cr)) {
- result.status = -1;
+ result.status = CASKBENCH_STATUS_ERROR;
goto FINAL;
}
@@ -151,7 +185,10 @@ main (int argc, char *argv[])
start_time = get_tick();
// Execute test_case
- result.status = perf_tests[c].test_case(cr);
+ if (perf_tests[c].test_case(cr))
+ result.status = CASKBENCH_STATUS_PASS;
+ else
+ result.status = CASKBENCH_STATUS_FAIL;
stop_time = get_tick();
run_time = stop_time - start_time;
@@ -162,8 +199,7 @@ main (int argc, char *argv[])
run_total += run_time;
} catch (...) {
warnx("Unknown exception encountered\n");
- // Mark as crashed
- result.status = 3; // ERROR
+ result.status = CASKBENCH_STATUS_CRASH;
goto FINAL;
}
}