Blame samples/stringto-test.cpp

Packit 01d647
// ***************************************************************** -*- C++ -*-
Packit 01d647
// stringto-test.cpp
Packit 01d647
// Test conversions from string to long, float and Rational types.
Packit 01d647
Packit 01d647
#include <exiv2/exiv2.hpp>
Packit 01d647
Packit 01d647
#include <iostream>
Packit 01d647
#include <iomanip>
Packit 01d647
Packit 01d647
const char* testcases[] = {
Packit 01d647
    // bool
Packit 01d647
    "True",
Packit 01d647
    "False",
Packit 01d647
    "t",
Packit 01d647
    "f",
Packit 01d647
    // long
Packit 01d647
    "-1",
Packit 01d647
    "0",
Packit 01d647
    "1",
Packit 01d647
    // float
Packit 01d647
    "0.0",
Packit 01d647
    "0.1",
Packit 01d647
    "0.01",
Packit 01d647
    "0.001",
Packit 01d647
    "-1.49999",
Packit 01d647
    "-1.5",
Packit 01d647
    "1.49999",
Packit 01d647
    "1.5",
Packit 01d647
    // Rational
Packit 01d647
    "0/1",
Packit 01d647
    "1/1",
Packit 01d647
    "1/3",
Packit 01d647
    "-1/3",
Packit 01d647
    "4/3",
Packit 01d647
    "-4/3",
Packit 01d647
    "0/0",
Packit 01d647
    // nok
Packit 01d647
    "text"
Packit 01d647
};
Packit 01d647
Packit 01d647
int main()
Packit 01d647
{
Packit 01d647
    std::cout << std::setfill(' ');
Packit 01d647
Packit 01d647
    std::cout << std::setw(12) << std::left << "string";
Packit 01d647
    std::cout << std::setw(12) << std::left << "long";
Packit 01d647
    std::cout << std::setw(12) << std::left << "float";
Packit 01d647
    std::cout << std::setw(12) << std::left << "Rational";
Packit 01d647
Packit 01d647
    std::cout << std::endl;
Packit 01d647
Packit 01d647
    for (unsigned int i = 0; i < EXV_COUNTOF(testcases); ++i) try {
Packit 01d647
        std::string s(testcases[i]);
Packit 01d647
        std::cout << std::setw(12) << std::left << s;
Packit 01d647
        bool ok;
Packit 01d647
Packit 01d647
        long l = Exiv2::parseLong(s, ok);
Packit 01d647
        std::cout << std::setw(12) << std::left;
Packit 01d647
        if (ok) std::cout << l; else std::cout << "nok";
Packit 01d647
Packit 01d647
        float f = Exiv2::parseFloat(s, ok);
Packit 01d647
        std::cout << std::setw(12) << std::left;
Packit 01d647
        if (ok) std::cout << f; else std::cout << "nok";
Packit 01d647
Packit 01d647
        Exiv2::Rational r = Exiv2::parseRational(s, ok);
Packit 01d647
        if (ok) std::cout << r.first << "/" << r.second;
Packit 01d647
        else std::cout << "nok";
Packit 01d647
Packit 01d647
        std::cout << std::endl;
Packit 01d647
    }
Packit 01d647
    catch (Exiv2::AnyError& e) {
Packit 01d647
        std::cout << "Caught Exiv2 exception '" << e << "'\n";
Packit 01d647
        return -1;
Packit 01d647
    }
Packit 01d647
Packit 01d647
    return 0;
Packit 01d647
}