File: format_number_range.cpp

package info (click to toggle)
cbmc 6.6.0-4
  • links: PTS
  • area: main
  • in suites: forky, sid, trixie
  • size: 153,852 kB
  • sloc: cpp: 386,459; ansic: 114,466; java: 28,405; python: 6,003; yacc: 4,552; makefile: 4,041; lex: 2,487; xml: 2,388; sh: 2,050; perl: 557; pascal: 184; javascript: 163; ada: 36
file content (72 lines) | stat: -rw-r--r-- 2,469 bytes parent folder | download
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
/*******************************************************************\

Module: format_number_range unit tests

Author: Michael Tautschnig

\*******************************************************************/

#include <util/exception_utils.h> // IWYU pragma: keep
#include <util/format_number_range.h>

#include <testing-utils/use_catch.h>

TEST_CASE(
  "Format a range of unsigned numbers",
  "[core][util][format_number_range]")
{
  const std::vector<mp_integer> singleton = {1};
  REQUIRE(format_number_range(singleton) == "1");

  const std::vector<mp_integer> r1 = {0, 42};
  REQUIRE(format_number_range(r1) == "0,42");

  const std::vector<mp_integer> r2 = {0, 1};
  REQUIRE(format_number_range(r2) == "0,1");

  const std::vector<mp_integer> r3 = {1, 2, 3};
  REQUIRE(format_number_range(r3) == "1-3");

  const std::vector<mp_integer> r4 = {1, 3, 4, 5};
  REQUIRE(format_number_range(r4) == "1,3-5");

  const std::vector<mp_integer> r5 = {1, 10, 11, 12, 42};
  REQUIRE(format_number_range(r5) == "1,10-12,42");

  const std::vector<mp_integer> r6 = {1, 10, 11, 12, 42, 43, 44};
  REQUIRE(format_number_range(r6) == "1,10-12,42-44");
}

TEST_CASE(
  "Parse a range of unsigned numbers",
  "[core][util][format_number_range]")
{
  const std::vector<mp_integer> singleton = {1};
  REQUIRE(parse_number_range("1") == singleton);

  const std::vector<mp_integer> r1 = {0, 42};
  REQUIRE(parse_number_range("0,42") == r1);

  const std::vector<mp_integer> r2 = {0, 1};
  REQUIRE(parse_number_range("0,1") == r2);

  const std::vector<mp_integer> r3 = {1, 2, 3};
  REQUIRE(parse_number_range("1-3") == r3);

  const std::vector<mp_integer> r4 = {1, 3, 4, 5};
  REQUIRE(parse_number_range("1,3-5") == r4);

  const std::vector<mp_integer> r5 = {1, 10, 11, 12, 42};
  REQUIRE(parse_number_range("1,10-12,42") == r5);

  const std::vector<mp_integer> r6 = {1, 10, 11, 12, 42, 43, 44};
  REQUIRE(parse_number_range("1,10-12,42-44") == r6);

  REQUIRE_THROWS_AS(parse_number_range(""), deserialization_exceptiont);
  REQUIRE_THROWS_AS(parse_number_range(","), deserialization_exceptiont);
  REQUIRE_THROWS_AS(parse_number_range("1,"), deserialization_exceptiont);
  REQUIRE_THROWS_AS(parse_number_range("-5"), deserialization_exceptiont);
  REQUIRE_THROWS_AS(parse_number_range("0,1-"), deserialization_exceptiont);
  REQUIRE_THROWS_AS(parse_number_range("1, 2"), deserialization_exceptiont);
  REQUIRE_THROWS_AS(parse_number_range("4-2"), deserialization_exceptiont);
}