From a3e83d59be22c7a0e1dd4639cefb85708614d718 Mon Sep 17 00:00:00 2001 From: Mark Date: Tue, 21 Nov 2023 08:28:55 -0700 Subject: [PATCH] fix error detection in int_pow (#2161) --- src/machine/arithmetic_ops.rs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) 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 { -- 2.54.0