From 9cece7dbff3d7fcfbd087893980aaceb40ccd0f3 Mon Sep 17 00:00:00 2001 From: Robert Bradshaw Date: Wed, 21 Oct 2009 23:39:02 -0700 Subject: [PATCH] More cmp tests, refix C assignable types. --- Cython/Compiler/ExprNodes.py | 4 ++++ tests/run/cmp.pyx | 27 +++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/Cython/Compiler/ExprNodes.py b/Cython/Compiler/ExprNodes.py index 5c3670b8..9871eda3 100644 --- a/Cython/Compiler/ExprNodes.py +++ b/Cython/Compiler/ExprNodes.py @@ -5151,6 +5151,10 @@ class CmpNode(object): # one Python type and one non-Python type, not assignable self.invalid_types_error(operand1, op, operand2) new_common_type = error_type + elif type1.assignable_from(type2): + new_common_type = type1 + elif type2.assignable_from(type1): + new_common_type = type2 else: # C types that we couldn't handle up to here are an error self.invalid_types_error(operand1, op, operand2) diff --git a/tests/run/cmp.pyx b/tests/run/cmp.pyx index ecc30d24..6b5fd14c 100644 --- a/tests/run/cmp.pyx +++ b/tests/run/cmp.pyx @@ -46,3 +46,30 @@ def typed_cmp(list L): print Ellipsis is L print 1 == L print L == 1.5 + +def pointer_cmp(): + """ + >>> pointer_cmp() + True + False + True + """ + cdef int* a = NULL + cdef double* b = NULL + cdef double** c = NULL + print a is NULL + print b is not NULL + print c == NULL + +def c_cmp(double a, int b, long c): + """ + >>> c_cmp(1, 2, 3) + True + >>> c_cmp(1.5, 2, 2) + True + >>> c_cmp(1.5, 2, 0) + False + >>> c_cmp(1, 1, 3) + False + """ + return a < b <= c -- 2.26.2