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 byBaseLatticeinBaseLattice.lub(L),BaseLattice.widening(L)andBaseLattice.lessOrEqual(L)methods, respectively.
-
-
Field Summary
Fields Modifier and Type Field Description static IntervalBOTTOMThe abstract bottom element.it.unive.lisa.util.numeric.IntIntervalintervalThe interval represented by this domain element.static IntervalTOPThe abstract top ([-Inf, +Inf]) element.static IntervalZEROThe 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)Intervalbottom()booleanequals(java.lang.Object obj)IntervalevalBinaryExpression(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, Interval left, Interval right, it.unive.lisa.program.cfg.ProgramPoint pp)IntervalevalNonNullConstant(it.unive.lisa.symbolic.value.Constant constant, it.unive.lisa.program.cfg.ProgramPoint pp)IntervalevalUnaryExpression(it.unive.lisa.symbolic.value.operator.unary.UnaryOperator operator, Interval arg, it.unive.lisa.program.cfg.ProgramPoint pp)IntervalglbAux(Interval other)inthashCode()booleanis(int n)Tests whether this interval instance corresponds (i.e., concretizes) exactly to the given integer.booleanisBottom()booleanisTop()booleanlessOrEqualAux(Interval other)IntervallubAux(Interval other)it.unive.lisa.analysis.representation.DomainRepresentationrepresentation()it.unive.lisa.analysis.SemanticDomain.SatisfiabilitysatisfiesBinaryExpression(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, Interval left, Interval right, it.unive.lisa.program.cfg.ProgramPoint pp)Intervaltop()IntervalwideningAux(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:
evalNonNullConstantin 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:
evalUnaryExpressionin 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:
trueif 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:
evalBinaryExpressionin classit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Interval>
-
lubAux
public Interval lubAux(Interval other) throws it.unive.lisa.analysis.SemanticException
- Specified by:
lubAuxin classit.unive.lisa.analysis.BaseLattice<Interval>- Throws:
it.unive.lisa.analysis.SemanticException
-
glbAux
public Interval glbAux(Interval other)
- Overrides:
glbAuxin classit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Interval>
-
wideningAux
public Interval wideningAux(Interval other) throws it.unive.lisa.analysis.SemanticException
- Overrides:
wideningAuxin 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:
lessOrEqualAuxin 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:
satisfiesBinaryExpressionin classit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Interval>
-
hashCode
public int hashCode()
- Specified by:
hashCodein classit.unive.lisa.analysis.BaseLattice<Interval>
-
equals
public boolean equals(java.lang.Object obj)
- Specified by:
equalsin 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:
assumeBinaryExpressionin classit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Interval>- Throws:
it.unive.lisa.analysis.SemanticException
-
-