GCC Code Coverage Report
Directory: . Exec Total Coverage
File: src/util/cardinality_class.cpp Lines: 9 23 39.1 %
Date: 2021-08-06 Branches: 13 25 52.0 %

Line Exec Source
1
/******************************************************************************
2
 * Top contributors (to current version):
3
 *   Andrew Reynolds
4
 *
5
 * This file is part of the cvc5 project.
6
 *
7
 * Copyright (c) 2009-2021 by the authors listed in the file AUTHORS
8
 * in the top-level source directory and their institutional affiliations.
9
 * All rights reserved.  See the file COPYING in the top-level source
10
 * directory for licensing information.
11
 * ****************************************************************************
12
 *
13
 * Utilities for cardinality classes.
14
 */
15
16
#include "util/cardinality_class.h"
17
18
#include <iostream>
19
20
namespace cvc5 {
21
22
const char* toString(CardinalityClass c)
23
{
24
  switch (c)
25
  {
26
    case CardinalityClass::ONE: return "ONE";
27
    case CardinalityClass::INTERPRETED_ONE: return "INTERPRETED_ONE";
28
    case CardinalityClass::FINITE: return "FINITE";
29
    case CardinalityClass::INTERPRETED_FINITE: return "INTERPRETED_FINITE";
30
    case CardinalityClass::INFINITE: return "INFINITE";
31
    case CardinalityClass::UNKNOWN: return "UNKNOWN";
32
    default: return "?CardinalityClass?";
33
  }
34
}
35
36
std::ostream& operator<<(std::ostream& out, CardinalityClass c)
37
{
38
  out << toString(c);
39
  return out;
40
}
41
42
CardinalityClass minCardinalityClass(CardinalityClass c1, CardinalityClass c2)
43
{
44
  return c1 < c2 ? c1 : c2;
45
}
46
47
19263
CardinalityClass maxCardinalityClass(CardinalityClass c1, CardinalityClass c2)
48
{
49
19263
  return c1 > c2 ? c1 : c2;
50
}
51
52
7337345
bool isCardinalityClassFinite(CardinalityClass c, bool fmfEnabled)
53
{
54
7337345
  if (c == CardinalityClass::ONE || c == CardinalityClass::FINITE)
55
  {
56
1262265
    return true;
57
  }
58
6075080
  if (fmfEnabled)
59
  {
60
    // if finite model finding is enabled, interpreted one/finite are also
61
    // considered finite.
62
    return c == CardinalityClass::INTERPRETED_ONE
63
177292
           || c == CardinalityClass::INTERPRETED_FINITE;
64
  }
65
5897788
  return false;
66
}
67
68
29322
}  // namespace cvc5