File: stringto-test.cpp

package info (click to toggle)
exiv2 0.28.7%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 109,216 kB
  • sloc: cpp: 77,667; python: 9,619; javascript: 237; makefile: 193; sh: 172; ansic: 51; sed: 16
file content (86 lines) | stat: -rw-r--r-- 1,747 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
// SPDX-License-Identifier: GPL-2.0-or-later
// Test conversions from string to long, float and Rational types.

#include <exiv2/exiv2.hpp>

#include <iostream>

static constexpr const char* testcases[] = {
    // bool
    "True",
    "False",
    "t",
    "f",
    // long
    "-1",
    "0",
    "1",
    // float
    "0.0",
    "0.1",
    "0.01",
    "0.001",
    "-1.49999",
    "-1.5",
    "1.49999",
    "1.5",
    // Rational
    "0/1",
    "1/1",
    "1/3",
    "-1/3",
    "4/3",
    "-4/3",
    "0/0",
    // nok
    "text",
};

int main() {
  Exiv2::XmpParser::initialize();
  ::atexit(Exiv2::XmpParser::terminate);

  std::cout << std::setfill(' ');

  std::cout << std::setw(12) << std::left << "string";
  std::cout << std::setw(12) << std::left << "long";
  std::cout << std::setw(12) << std::left << "float";
  std::cout << std::setw(12) << std::left << "Rational";

  std::cout << std::endl;

  for (auto&& testcase : testcases) {
    try {
      std::string s(testcase);
      std::cout << std::setw(12) << std::left << s;
      bool ok = false;

      const auto l = Exiv2::parseInt64(s, ok);
      std::cout << std::setw(12) << std::left;
      if (ok)
        std::cout << l;
      else
        std::cout << "nok";

      float f = Exiv2::parseFloat(s, ok);
      std::cout << std::setw(12) << std::left;
      if (ok)
        std::cout << f;
      else
        std::cout << "nok";

      Exiv2::Rational r = Exiv2::parseRational(s, ok);
      if (ok)
        std::cout << r.first << "/" << r.second;
      else
        std::cout << "nok";

      std::cout << std::endl;
    } catch (Exiv2::Error& e) {
      std::cout << "Caught Exiv2 exception '" << e << "'\n";
      return EXIT_FAILURE;
    }
  }

  return EXIT_SUCCESS;
}