solverforge-solver 0.17.1

Solver engine for SolverForge
Documentation
#[inline]
pub(super) fn sum_two(left: i64, right: i64) -> i64 {
    clamp_i128(i128::from(left) + i128::from(right))
}

#[inline]
pub(super) fn sum_two_minus_one(left: i64, right: i64, minus: i64) -> i64 {
    clamp_i128(i128::from(left) + i128::from(right) - i128::from(minus))
}

#[inline]
fn clamp_i128(value: i128) -> i64 {
    value.clamp(i128::from(i64::MIN), i128::from(i64::MAX)) as i64
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn sums_normal_values() {
        assert_eq!(sum_two(4, 7), 11);
        assert_eq!(sum_two_minus_one(10, 8, 3), 15);
    }

    #[test]
    fn clamps_positive_overflow() {
        assert_eq!(sum_two(i64::MAX, 1), i64::MAX);
        assert_eq!(sum_two_minus_one(i64::MAX, i64::MAX, -1), i64::MAX);
    }

    #[test]
    fn clamps_negative_overflow() {
        assert_eq!(sum_two(i64::MIN, -1), i64::MIN);
        assert_eq!(sum_two_minus_one(i64::MIN, i64::MIN, 1), i64::MIN);
    }
}