Class 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 a BaseNonRelationalValueDomain, 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 by BaseLattice in BaseLattice.lub(L), BaseLattice.widening(L) and BaseLattice.lessOrEqual(L) methods, respectively.
    • Nested Class Summary

      • Nested classes/interfaces inherited from class it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain

        it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain.EvaluationVisitor
    • 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.
      • Fields inherited from interface it.unive.lisa.analysis.Lattice

        BOTTOM_STRING, TOP_STRING
    • 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
      • Methods inherited from class it.unive.lisa.analysis.BaseLattice

        lessOrEqual, lub, widening
      • Methods inherited from class java.lang.Object

        clone, finalize, getClass, notify, notifyAll, wait, wait, wait
      • Methods inherited from interface it.unive.lisa.analysis.Lattice

        lessOrEqual, lub, widening
      • Methods inherited from interface it.unive.lisa.analysis.nonrelational.NonRelationalElement

        variable
    • 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 underlying IntInterval
      • Interval

        public Interval​(it.unive.lisa.util.numeric.MathNumber low,
                        it.unive.lisa.util.numeric.MathNumber high)
        Builds the interval.
        Parameters:
        low - the lower bound
        high - the higher bound
      • Interval

        public Interval​(int low,
                        int high)
        Builds the interval.
        Parameters:
        low - the lower bound
        high - the higher bound
      • Interval

        public Interval()
        Builds the top interval.
    • Method Detail

      • isTop

        public boolean isTop()
      • 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 class it.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 class it.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 through IntInterval.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 class it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Interval>
      • lubAux

        public Interval lubAux​(Interval other)
                        throws it.unive.lisa.analysis.SemanticException
        Specified by:
        lubAux in class it.unive.lisa.analysis.BaseLattice<Interval>
        Throws:
        it.unive.lisa.analysis.SemanticException
      • glbAux

        public Interval glbAux​(Interval other)
        Overrides:
        glbAux in class it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Interval>
      • wideningAux

        public Interval wideningAux​(Interval other)
                             throws it.unive.lisa.analysis.SemanticException
        Overrides:
        wideningAux in class it.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 class it.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 class it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Interval>
      • hashCode

        public int hashCode()
        Specified by:
        hashCode in class it.unive.lisa.analysis.BaseLattice<Interval>
      • equals

        public boolean equals​(java.lang.Object obj)
        Specified by:
        equals in class it.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 class it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<Interval>
        Throws:
        it.unive.lisa.analysis.SemanticException