[BUGFIX] numeric::info(nonnegative): correctly handle complex numbers.
authorAlexei Sheplyakov <Alexei.Sheplyakov@gmail.com>
Tue, 28 Feb 2012 14:12:56 +0000 (16:12 +0200)
committerAlexei Sheplyakov <Alexei.Sheplyakov@gmail.com>
Tue, 28 Feb 2012 14:12:56 +0000 (16:12 +0200)
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
ginac/numeric.cpp

index 715acff9d15783f57c3db1ccc52936ff5ad89113..d5ae27b27a1e5da5354271a5e65e90703e035c90 100644 (file)
@@ -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) {
index f05763da1fe9d4ef231b6cbd88cd5018706ac5ff..18725b216cf5e40eeccebe3cc7fe41abec698372 100644 (file)
@@ -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: