### Question:
IntegerOperators { @ScalarOperator(ADD) @SqlType(StandardTypes.INTEGER) public static long add(@SqlType(StandardTypes.INTEGER) long left, @SqlType(StandardTypes.INTEGER) long right) { try { return Math.addExact((int) left, (int) right); } catch (ArithmeticException e) { throw new PrestoException(NUMERIC_VALUE_OUT_OF_RANGE, format("integer addition overflow: %s + %s", left, right), e); } } private  IntegerOperators(); @ScalarOperator(ADD) @SqlType(StandardTypes.INTEGER) static long add(@SqlType(StandardTypes.INTEGER) long left, @SqlType(StandardTypes.INTEGER) long right); @ScalarOperator(SUBTRACT) @SqlType(StandardTypes.INTEGER) static long subtract(@SqlType(StandardTypes.INTEGER) long left, @SqlType(StandardTypes.INTEGER) long right); @ScalarOperator(MULTIPLY) @SqlType(StandardTypes.INTEGER) static long multiply(@SqlType(StandardTypes.INTEGER) long left, @SqlType(StandardTypes.INTEGER) long right); @ScalarOperator(DIVIDE) @SqlType(StandardTypes.INTEGER) static long divide(@SqlType(StandardTypes.INTEGER) long left, @SqlType(StandardTypes.INTEGER) long right); @ScalarOperator(MODULUS) @SqlType(StandardTypes.INTEGER) static long modulus(@SqlType(StandardTypes.INTEGER) long left, @SqlType(StandardTypes.INTEGER) long right); @ScalarOperator(NEGATION) @SqlType(StandardTypes.INTEGER) static long negate(@SqlType(StandardTypes.INTEGER) long value); @ScalarOperator(CAST) @SqlType(StandardTypes.BIGINT) static long castToBigint(@SqlType(StandardTypes.INTEGER) long value); @ScalarOperator(CAST) @SqlType(StandardTypes.SMALLINT) static long castToSmallint(@SqlType(StandardTypes.INTEGER) long value); @ScalarOperator(CAST) @SqlType(StandardTypes.TINYINT) static long castToTinyint(@SqlType(StandardTypes.INTEGER) long value); @ScalarOperator(CAST) @SqlType(StandardTypes.BOOLEAN) static boolean castToBoolean(@SqlType(StandardTypes.INTEGER) long value); @ScalarOperator(CAST) @SqlType(StandardTypes.DOUBLE) static double castToDouble(@SqlType(StandardTypes.INTEGER) long value); @ScalarOperator(CAST) @SqlType(StandardTypes.REAL) static long castToReal(@SqlType(StandardTypes.INTEGER) long value); @ScalarOperator(CAST) @LiteralParameters("x") @SqlType("varchar(x)") static Slice castToVarchar(@SqlType(StandardTypes.INTEGER) long value); @ScalarOperator(SATURATED_FLOOR_CAST) @SqlType(StandardTypes.SMALLINT) static long saturatedFloorCastToSmallint(@SqlType(StandardTypes.INTEGER) long value); @ScalarOperator(SATURATED_FLOOR_CAST) @SqlType(StandardTypes.TINYINT) static long saturatedFloorCastToTinyint(@SqlType(StandardTypes.INTEGER) long value);  }### Answer:
@Test public void testAdd() { assertFunction("INTEGER'37' + INTEGER'37'", INTEGER, 37 + 37); assertFunction("INTEGER'37' + INTEGER'17'", INTEGER, 37 + 17); assertFunction("INTEGER'17' + INTEGER'37'", INTEGER, 17 + 37); assertFunction("INTEGER'17' + INTEGER'17'", INTEGER, 17 + 17); assertNumericOverflow(format("INTEGER'%s' + INTEGER'1'", Integer.MAX_VALUE), "integer addition overflow: 2147483647 + 1"); }