File: bitwise.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 (57 lines) | stat: -rw-r--r-- 1,980 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
/*******************************************************************\
 Module: Unit tests for variable/sensitivity/abstract_object::merge
 Author: DiffBlue Limited
\*******************************************************************/

#include <testing-utils/use_catch.h>

#include <util/arith_tools.h>
#include <util/bitvector_types.h>
#include <util/interval.h>

SCENARIO("bitwise interval domain", "[core][analyses][interval][bitwise]")
{
  WHEN("We have two unsigned single value intervals - 5 and 9")
  {
    const unsignedbv_typet &unsigned_int = unsignedbv_typet(32);
    constant_interval_exprt five =
      constant_interval_exprt::singleton(from_integer(5, unsigned_int));
    constant_interval_exprt nine =
      constant_interval_exprt::singleton(from_integer(9, unsigned_int));

    constant_interval_exprt five_to_nine(
      from_integer(5, unsigned_int), from_integer(9, unsigned_int));

    THEN("Bitwise or should yield bitwise representation of 13")
    {
      REQUIRE(
        constant_interval_exprt::bitwise_or(five, nine) ==
        constant_interval_exprt::singleton(from_integer(13, unsigned_int)));

      REQUIRE(constant_interval_exprt::bitwise_or(five_to_nine, nine).is_top());
    }

    THEN("Bitwise and should yield bitwise representation of 1")
    {
      REQUIRE(
        constant_interval_exprt::bitwise_and(five, nine) ==
        constant_interval_exprt::singleton(from_integer(1, unsigned_int)));
      REQUIRE(
        (five & nine) ==
        constant_interval_exprt::singleton(from_integer(1, unsigned_int)));

      REQUIRE(
        constant_interval_exprt::bitwise_and(five_to_nine, nine).is_top());
    }

    THEN("Bitwise xor should yield bitwise representation of 12")
    {
      REQUIRE(
        constant_interval_exprt::bitwise_xor(five, nine) ==
        constant_interval_exprt::singleton(from_integer(12, unsigned_int)));

      REQUIRE(
        constant_interval_exprt::bitwise_xor(five_to_nine, nine).is_top());
    }
  }
}