From 05b3a16973aad40a9c17ee0f0bd06b02ac4706ef Mon Sep 17 00:00:00 2001 From: Alexei Sheplyakov Date: Tue, 28 Feb 2012 16:12:56 +0200 Subject: [PATCH] [BUGFIX] numeric::info(nonnegative): correctly handle complex numbers. numeric::info(info_flags::nonnegative) returns true for an arbitrary complex number with non-zero imaginary part. Thanks to Burcin Erocal for reporting. --- check/exam_numeric.cpp | 5 +++++ ginac/numeric.cpp | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/check/exam_numeric.cpp b/check/exam_numeric.cpp index 715acff9..d5ae27b2 100644 --- a/check/exam_numeric.cpp +++ b/check/exam_numeric.cpp @@ -68,6 +68,11 @@ static unsigned exam_numeric1() << " erroneously not recognized as complex rational" << endl; ++result; } + if (test_crat.info(info_flags::nonnegative)) { + clog << test_crat + << " erroneously recognized as non-negative number" << endl; + ++result; + } int i = numeric(1984).to_int(); if (i-1984) { diff --git a/ginac/numeric.cpp b/ginac/numeric.cpp index f05763da..18725b21 100644 --- a/ginac/numeric.cpp +++ b/ginac/numeric.cpp @@ -700,7 +700,7 @@ bool numeric::info(unsigned inf) const case info_flags::negative: return is_negative(); case info_flags::nonnegative: - return !is_negative(); + return is_zero() || is_positive(); case info_flags::posint: return is_pos_integer(); case info_flags::negint: -- 2.44.0