// Simple-minded code to determine the performance of two string-processing
// strategies.
//
// CS 306 - Computer Algorithms II
// Fall '08
#include <iostream>
#include <string>
#include "cl-options.h"
#include "episode-timer.h"
// Deja vu c++ style.
static void run_test(
unsigned, unsigned, void (*)(unsigned), const char * const)
static void
unnested(unsigned size) {
// Fake reading the given number of strings and then fake processing them.
const std::string read(80, ' ')
std::string str
while (size-- > 0)
str += read
for (unsigned i = 0; i < str.size(); i++)
if (str[i] == '<') {
}
}
static void
nested(unsigned size) {
// Fake reading the given number of strings and then fake processing them.
const std::string read(80, ' ')
std::string str
while (size-- > 0) {
str += read
for (unsigned i = 0; i < str.size(); i++)
if (str[i] == '<') {
str[i] = ' '
}
}
}
static void
do_test(unsigned iterations, unsigned size) {
// Time through the given number of iterations the string processors when
// processing the given number of lines.
run_test(iterations, size, unnested, "unnested")
run_test(iterations, size, nested, "nested")
}
int
main(int argc, char * argv[]) {
// Write to std-out some performance data for various string processors
// performing synthetic work.
cl_options opts
opts['i'] = "10"
opts['s'] = "100"
const unsigned o = get_cl_options(argc, argv, opts)
if (o ≠ static_cast<unsigned>(argc)) {
std::cerr << "Too many command-line arguments.\n"
std::cerr << "Command format is \"" << argv[0] << " [n]\".\n"
exit(EXIT_FAILURE)
}
unsigned
size = atoi(opts['s']),
iterations = atoi(opts['i'])
do_test(iterations, size)
}
static void
run_test(
unsigned iterations, unsigned size,
void (* strfun)(unsigned), const char * const name) {
// Run performance timing on the given string processor with the given name.
// The timing's over the given number of iterations; the processor works on a
// string comprising the given number of lines.
episode_timer et
while (iterations-- > 0) {
et.start()
strfun(size)
et.stop()
}
printf("curve %s x %u y %u sd %u\n", name, size,
static_cast<unsigned>(round(et.average())),
static_cast<unsigned>(round(et.stddev())))
}
// $Log: string-proc.cc,v $
// Revision 1.1 2007-10-05 14:56:19 rclayton
// Created.
//
syntax highlighted by Code2HTML, v. 0.9.1