Predicate relOpWithSwapAndNegate
Holds if rel is a comparison operation (<, >, <= or >=)
with fully-converted children a and b, described by dir and strict, with
result branch.
This allows for the relation to be either as written, or with its
arguments reversed; for example, if rel is x < 5 then
relOpWithSwapAndNegate(rel, x, 5, Lesser(), Strict(), true),
relOpWithSwapAndNegate(rel, 5, x, Greater(), Strict(), true),
relOpWithSwapAndNegate(rel, x, 5, Greater(), Nonstrict(), false) and
relOpWithSwapAndNegate(rel, 5, x, Lesser(), Nonstrict(), false) hold.
Import path
import semmle.code.cpp.rangeanalysis.RangeAnalysisUtilspredicate relOpWithSwapAndNegate(RelationalOperation rel, Expr a, Expr b, RelationDirection dir, RelationStrictness strict, boolean branch)