More C99 complex fixes, plus Python tests

This commit is contained in:
Leo Singer 2020-06-17 13:03:17 -04:00
commit 511df0e642
7 changed files with 83 additions and 13 deletions

View file

@ -68,20 +68,69 @@
%{ %{
#include <complex.h>
%} %}
%inline %inline
{ {
double complex Conj(complex a) complex double Conj(complex double a)
{ {
return conj(a); return conj(a);
} }
float complex Conjf(float complex a) complex float Conjf(complex float a)
{ {
return conjf(a); return conjf(a);
} }
double complex Conj1(double complex a)
{
return conj(a);
}
float complex Conjf1(float complex a)
{
return conjf(a);
}
_Complex double Conj2(_Complex double a)
{
return conj(a);
}
_Complex float Conjf2(_Complex float a)
{
return conjf(a);
}
double _Complex Conj3(double _Complex a)
{
return conj(a);
}
float _Complex Conjf3(float _Complex a)
{
return conjf(a);
}
complex Conj4(complex a)
{
return conj(a);
}
_Complex Conj5(_Complex a)
{
return conj(a);
}
} }

View file

@ -92,6 +92,7 @@ CPP11_TEST_CASES = \
cpp11_std_unordered_set \ cpp11_std_unordered_set \
C_TEST_CASES += \ C_TEST_CASES += \
complextest \
file_test \ file_test \
li_cstring \ li_cstring \
li_cwstring \ li_cwstring \

View file

@ -14,17 +14,34 @@ if complextest.Conj2(a) != a.conjugate():
if complextest.Conjf2(a) != a.conjugate(): if complextest.Conjf2(a) != a.conjugate():
raise RuntimeError, "bad complex mapping" raise RuntimeError, "bad complex mapping"
if 'Conj3' in dir(complextest):
if complextest.Conj3(a) != a.conjugate():
raise RuntimeError, "bad complex mapping"
v = (complex(1, 2), complex(2, 3), complex(4, 3), 1) if 'Conjf3' in dir(complextest):
if complextest.Conjf3(a) != a.conjugate():
raise RuntimeError, "bad complex mapping"
if len(complextest.CopyHalf(v)) != 2: if 'Conj4' in dir(complextest):
raise RuntimeError("CopyHalf failed") if complextest.Conj4(a) != a.conjugate():
raise RuntimeError, "bad complex mapping"
if len(complextest.CopyHalfRef(v)) != 2: if 'Conj5' in dir(complextest):
raise RuntimeError("CopyHalfRef failed") if complextest.Conj5(a) != a.conjugate():
raise RuntimeError, "bad complex mapping"
p = complextest.ComplexPair() if 'CopyHalf' in dir(complextest):
p.z1 = complex(0, 1)
p.z2 = complex(0, -1) v = (complex(1, 2), complex(2, 3), complex(4, 3), 1)
if complextest.Conj(p.z2) != p.z1:
raise RuntimeError, "bad complex mapping" if len(complextest.CopyHalf(v)) != 2:
raise RuntimeError("CopyHalf failed")
if len(complextest.CopyHalfRef(v)) != 2:
raise RuntimeError("CopyHalfRef failed")
p = complextest.ComplexPair()
p.z1 = complex(0, 1)
p.z2 = complex(0, -1)
if complextest.Conj(p.z2) != p.z1:
raise RuntimeError, "bad complex mapping"

View file

@ -12,6 +12,7 @@
#include <complex.h> #include <complex.h>
%} %}
#define complex _Complex
/* C complex constructor */ /* C complex constructor */
#define CCplxConst(r, i) ((r) + I*(i)) #define CCplxConst(r, i) ((r) + I*(i))

View file

@ -12,6 +12,7 @@
#include <complex.h> #include <complex.h>
%} %}
#define complex _Complex
/* C complex constructor */ /* C complex constructor */
#define CCplxConst(r, i) ((r) + I*(i)) #define CCplxConst(r, i) ((r) + I*(i))

View file

@ -12,6 +12,7 @@
#include <complex.h> #include <complex.h>
%} %}
#define complex _Complex
/* C complex constructor */ /* C complex constructor */
#define CCplxConst(r, i) ((r) + I*(i)) #define CCplxConst(r, i) ((r) + I*(i))

View file

@ -6294,7 +6294,7 @@ type_specifier : TYPE_INT {
$$.type = 0; $$.type = 0;
} }
| TYPE_COMPLEX { | TYPE_COMPLEX {
$$.type = NewString("complex"); $$.type = NewString("_Complex");
$$.us = 0; $$.us = 0;
} }
| TYPE_NON_ISO_INT8 { | TYPE_NON_ISO_INT8 {