← index
cplusplus11.Examples/stopwatch/string-test.cpp
Source: cplusplus11.Examples/stopwatch/string-test.cpp
/* String Test using Stop Watch template class */

#include<iostream>
#include<string>
#include<cstdlib>
#include<fstream>
#include"stopwatch.hpp"

// unoptimized function
std::string unop_RemoveSpace(std::string search) {
    std::string result;
    for(size_t i = 0; i < search.length(); ++i) {
        if(search[i] != ' ') {
            result = result + search[i];
        }
    }
    return result;
}

// optimized function
void op_RemoveSpace(std::string &result, const std::string &search) {
    result.clear();
    result.reserve(search.length());
    for(auto i=search.begin(), stop=search.end(); i != stop; ++i) {
        if(*i != ' ') result += *i;
    }
}

void testRemoveSpace(std::string s) {
    unsigned long timedValues[100];
    for(unsigned int i = 0; i < 100; ++i) {
        StopWatch<HighResolutionClock> timer_clock("Unoptimized Remove Space");
        unop_RemoveSpace(s);
        timedValues[i] = timer_clock.TimePassed();
    }
    double average = 0;
    for(unsigned int i = 0; i < 100; ++i) {
        average += timedValues[i];
    }
    average /= 100;
    std::cout << "Average time for unoptimized function call: " << average << " nanoseconds\n";
}

void op_testRemoveSpace(std::string s) {
    unsigned long timedValues[100];
    std::string result;
    for(unsigned int i = 0; i < 100; ++i) {
        StopWatch<HighResolutionClock> timer_clock("Optimized Remove Space");
        op_RemoveSpace(result, s);
        timedValues[i] = timer_clock.TimePassed();
    }
    double average = 0;
    for(unsigned int i = 0; i < 100; ++i) {
        average += timedValues[i];
    }
    average /= 100;
    std::cout << "Average time for optimized function call: " << average << " nanoseconds\n";
}


int main() {
    std::fstream file;
    file.open("string-test.cpp", std::ios::in|std::ios::binary);
    if(!file.is_open()) {
        std::cerr << "Could not open file string-test.cpp\n";
        exit(0);
    }
    file.seekg(0, std::ios::end);
    size_t len = file.tellg();
    file.seekg(0, std::ios::beg);
    char *value = new char[len+1];
    file.read(value, len);
    std::string temp(value);
    delete [] value;
    file.close();
    
    testRemoveSpace(temp);
    op_testRemoveSpace(temp);
    return 0;
}