Package it.unive.lisa.analysis.numeric
Class Interval
- java.lang.Object
-
- it.unive.lisa.analysis.BaseLattice<T>
-
- it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Interval>
-
- it.unive.lisa.analysis.numeric.Interval
-
- All Implemented Interfaces:
it.unive.lisa.analysis.Lattice<Interval>
,it.unive.lisa.analysis.nonrelational.NonRelationalDomain<Interval,it.unive.lisa.symbolic.value.ValueExpression,it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<Interval>>
,it.unive.lisa.analysis.nonrelational.NonRelationalElement<Interval,it.unive.lisa.symbolic.value.ValueExpression,it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<Interval>>
,it.unive.lisa.analysis.nonrelational.value.NonRelationalValueDomain<Interval>
,it.unive.lisa.analysis.SemanticEvaluator
public class Interval extends it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Interval>
The overflow-insensitive interval abstract domain, approximating integer values as the minimum integer interval containing them. It is implemented as aBaseNonRelationalValueDomain
, handling top and bottom values for the expression evaluation and bottom values for the expression satisfiability. Top and bottom cases for least upper bounds, widening and less or equals operations are handled byBaseLattice
inBaseLattice.lub(L)
,BaseLattice.widening(L)
andBaseLattice.lessOrEqual(L)
methods, respectively.
-
-
Field Summary
Fields Modifier and Type Field Description static Interval
BOTTOM
The abstract bottom element.it.unive.lisa.util.numeric.IntInterval
interval
The interval represented by this domain element.static Interval
TOP
The abstract top ([-Inf, +Inf]
) element.static Interval
ZERO
The abstract zero ([0, 0]
) element.
-
Constructor Summary
Constructors Constructor Description Interval()
Builds the top interval.Interval(int low, int high)
Builds the interval.Interval(it.unive.lisa.util.numeric.IntInterval interval)
Builds the interval.Interval(it.unive.lisa.util.numeric.MathNumber low, it.unive.lisa.util.numeric.MathNumber high)
Builds the interval.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<Interval>
assumeBinaryExpression(it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<Interval> environment, it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, it.unive.lisa.symbolic.value.ValueExpression left, it.unive.lisa.symbolic.value.ValueExpression right, it.unive.lisa.program.cfg.ProgramPoint pp)
Interval
bottom()
boolean
equals(java.lang.Object obj)
Interval
evalBinaryExpression(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, Interval left, Interval right, it.unive.lisa.program.cfg.ProgramPoint pp)
Interval
evalNonNullConstant(it.unive.lisa.symbolic.value.Constant constant, it.unive.lisa.program.cfg.ProgramPoint pp)
Interval
evalUnaryExpression(it.unive.lisa.symbolic.value.operator.unary.UnaryOperator operator, Interval arg, it.unive.lisa.program.cfg.ProgramPoint pp)
Interval
glbAux(Interval other)
int
hashCode()
boolean
is(int n)
Tests whether this interval instance corresponds (i.e., concretizes) exactly to the given integer.boolean
isBottom()
boolean
isTop()
boolean
lessOrEqualAux(Interval other)
Interval
lubAux(Interval other)
it.unive.lisa.analysis.representation.DomainRepresentation
representation()
it.unive.lisa.analysis.SemanticDomain.Satisfiability
satisfiesBinaryExpression(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, Interval left, Interval right, it.unive.lisa.program.cfg.ProgramPoint pp)
Interval
top()
Interval
wideningAux(Interval other)
-
Methods inherited from class it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain
assume, assumeTernaryExpression, assumeUnaryExpression, canProcess, eval, evalIdentifier, evalNullConstant, evalPushAny, evalTernaryExpression, evalTypeCast, evalTypeConv, glb, satisfies, satisfiesAbstractValue, satisfiesNonNullConstant, satisfiesNullConstant, satisfiesTernaryExpression, satisfiesUnaryExpression, toString, tracksIdentifiers
-
-
-
-
Field Detail
-
ZERO
public static final Interval ZERO
The abstract zero ([0, 0]
) element.
-
TOP
public static final Interval TOP
The abstract top ([-Inf, +Inf]
) element.
-
BOTTOM
public static final Interval BOTTOM
The abstract bottom element.
-
interval
public final it.unive.lisa.util.numeric.IntInterval interval
The interval represented by this domain element.
-
-
Constructor Detail
-
Interval
public Interval(it.unive.lisa.util.numeric.IntInterval interval)
Builds the interval.- Parameters:
interval
- the underlyingIntInterval
-
Interval
public Interval(it.unive.lisa.util.numeric.MathNumber low, it.unive.lisa.util.numeric.MathNumber high)
Builds the interval.- Parameters:
low
- the lower boundhigh
- the higher bound
-
Interval
public Interval(int low, int high)
Builds the interval.- Parameters:
low
- the lower boundhigh
- the higher bound
-
Interval
public Interval()
Builds the top interval.
-
-
Method Detail
-
top
public Interval top()
-
isTop
public boolean isTop()
-
bottom
public Interval bottom()
-
isBottom
public boolean isBottom()
-
representation
public it.unive.lisa.analysis.representation.DomainRepresentation representation()
-
evalNonNullConstant
public Interval evalNonNullConstant(it.unive.lisa.symbolic.value.Constant constant, it.unive.lisa.program.cfg.ProgramPoint pp)
- Overrides:
evalNonNullConstant
in classit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Interval>
-
evalUnaryExpression
public Interval evalUnaryExpression(it.unive.lisa.symbolic.value.operator.unary.UnaryOperator operator, Interval arg, it.unive.lisa.program.cfg.ProgramPoint pp)
- Overrides:
evalUnaryExpression
in classit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Interval>
-
is
public boolean is(int n)
Tests whether this interval instance corresponds (i.e., concretizes) exactly to the given integer. The tests is performed throughIntInterval.is(int)
.- Parameters:
n
- the integer value- Returns:
true
if that condition holds
-
evalBinaryExpression
public Interval evalBinaryExpression(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, Interval left, Interval right, it.unive.lisa.program.cfg.ProgramPoint pp)
- Overrides:
evalBinaryExpression
in classit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Interval>
-
lubAux
public Interval lubAux(Interval other) throws it.unive.lisa.analysis.SemanticException
- Specified by:
lubAux
in classit.unive.lisa.analysis.BaseLattice<Interval>
- Throws:
it.unive.lisa.analysis.SemanticException
-
glbAux
public Interval glbAux(Interval other)
- Overrides:
glbAux
in classit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Interval>
-
wideningAux
public Interval wideningAux(Interval other) throws it.unive.lisa.analysis.SemanticException
- Overrides:
wideningAux
in classit.unive.lisa.analysis.BaseLattice<Interval>
- Throws:
it.unive.lisa.analysis.SemanticException
-
lessOrEqualAux
public boolean lessOrEqualAux(Interval other) throws it.unive.lisa.analysis.SemanticException
- Specified by:
lessOrEqualAux
in classit.unive.lisa.analysis.BaseLattice<Interval>
- Throws:
it.unive.lisa.analysis.SemanticException
-
satisfiesBinaryExpression
public it.unive.lisa.analysis.SemanticDomain.Satisfiability satisfiesBinaryExpression(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, Interval left, Interval right, it.unive.lisa.program.cfg.ProgramPoint pp)
- Overrides:
satisfiesBinaryExpression
in classit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Interval>
-
hashCode
public int hashCode()
- Specified by:
hashCode
in classit.unive.lisa.analysis.BaseLattice<Interval>
-
equals
public boolean equals(java.lang.Object obj)
- Specified by:
equals
in classit.unive.lisa.analysis.BaseLattice<Interval>
-
assumeBinaryExpression
public it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<Interval> assumeBinaryExpression(it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<Interval> environment, it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, it.unive.lisa.symbolic.value.ValueExpression left, it.unive.lisa.symbolic.value.ValueExpression right, it.unive.lisa.program.cfg.ProgramPoint pp) throws it.unive.lisa.analysis.SemanticException
- Overrides:
assumeBinaryExpression
in classit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Interval>
- Throws:
it.unive.lisa.analysis.SemanticException
-
-