From: Mark Date: Tue, 21 Nov 2023 15:28:55 +0000 (-0700) Subject: fix error detection in int_pow (#2161) X-Git-Tag: v0.9.4~109 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=a3e83d59be22c7a0e1dd4639cefb85708614d718;p=scryer-prolog.git fix error detection in int_pow (#2161) --- diff --git a/src/machine/arithmetic_ops.rs b/src/machine/arithmetic_ops.rs index ff38c2a5..8380c130 100644 --- a/src/machine/arithmetic_ops.rs +++ b/src/machine/arithmetic_ops.rs @@ -348,7 +348,7 @@ pub(crate) fn int_pow(n1: Number, n2: Number, arena: &mut Arena) -> Result { let n1_i = n1.get_num(); - if !(n1_i == 1 || n1_i == 0 || n1_i == -1) && n2.is_zero() { + if !(n1_i == 1 || n1_i == 0 || n1_i == -1) && n2.is_negative() { let n = Number::Fixnum(n1); Err(numerical_type_error(ValidType::Float, n, stub_gen)) } else { @@ -359,7 +359,7 @@ pub(crate) fn int_pow(n1: Number, n2: Number, arena: &mut Arena) -> Result { let n2_i = n2.get_num(); - if !(*n1 == Integer::from(1) || n1.is_zero() || *n1 == Integer::from(-1)) && n2_i < 0 { + if !(n1.is_one() || n1.is_zero() || n1.num_eq(&-1)) && n2_i < 0 { let n = Number::Integer(n1); Err(numerical_type_error(ValidType::Float, n, stub_gen)) } else { @@ -368,9 +368,7 @@ pub(crate) fn int_pow(n1: Number, n2: Number, arena: &mut Arena) -> Result { - if !(*n1 == Integer::from(1) || n1.is_zero() || *n1 == Integer::from(-1)) - && n2.is_zero() - { + if !(n1.is_one() || n1.is_zero() || n1.num_eq(&-1)) && n2.is_negative() { let n = Number::Integer(n1); Err(numerical_type_error(ValidType::Float, n, stub_gen)) } else {