mirror of https://github.com/KLayout/klayout.git
Fixed a conversion issue with ints on MSVC
Because long is 32bit on Windows (like int), the conversion from long to unsigned int was subject to sign overflow. This was fixed by going to unsigned int via unsigned long.
This commit is contained in:
parent
e5852a7757
commit
f82e7929d8
|
|
@ -834,6 +834,14 @@ static gsi::Class<A> decl_a ("", "A",
|
|||
#endif
|
||||
gsi::method ("*a10_prot", &A::a10_d) +
|
||||
gsi::method ("a10_f", &A::a10_f) +
|
||||
gsi::method ("a10_s", &A::a10_s) +
|
||||
gsi::method ("a10_us", &A::a10_us) +
|
||||
gsi::method ("a10_i", &A::a10_i) +
|
||||
gsi::method ("a10_l", &A::a10_l) +
|
||||
gsi::method ("a10_ll", &A::a10_ll) +
|
||||
gsi::method ("a10_ui", &A::a10_ui) +
|
||||
gsi::method ("a10_ul", &A::a10_ul) +
|
||||
gsi::method ("a10_ull", &A::a10_ull) +
|
||||
gsi::method ("a10_fptr", &A::a10_fptr) +
|
||||
gsi::method ("a10_dptr", &A::a10_dptr) +
|
||||
gsi::method ("a10_iptr", &A::a10_iptr) +
|
||||
|
|
@ -874,6 +882,14 @@ static gsi::Class<A> decl_a ("", "A",
|
|||
gsi::method ("a10_cllref", &A::a10_cllref) +
|
||||
gsi::method ("a10_cullref", &A::a10_cullref) +
|
||||
gsi::method ("a10_csref", &A::a10_csref) +
|
||||
gsi::method ("a11_s", &A::a11_s) +
|
||||
gsi::method ("a11_us", &A::a11_us) +
|
||||
gsi::method ("a11_i", &A::a11_i) +
|
||||
gsi::method ("a11_l", &A::a11_l) +
|
||||
gsi::method ("a11_ll", &A::a11_ll) +
|
||||
gsi::method ("a11_ui", &A::a11_ui) +
|
||||
gsi::method ("a11_ul", &A::a11_ul) +
|
||||
gsi::method ("a11_ull", &A::a11_ull) +
|
||||
gsi::method ("a_vp1", &A::a_vp1) +
|
||||
gsi::method ("a_vp2", &A::a_vp2) +
|
||||
gsi::method ("a9a", &A::a9a) +
|
||||
|
|
|
|||
|
|
@ -155,6 +155,15 @@ struct A
|
|||
bool a9a (int i) const { return i == 5; }
|
||||
int a9b (bool f) const { return f ? 5 : -5; }
|
||||
|
||||
short a11_s (double f) { return short(f); }
|
||||
unsigned short a11_us (double f) { return (unsigned short)(f); }
|
||||
int a11_i (double f) { return int(f); }
|
||||
unsigned int a11_ui (double f) { return (unsigned int)(f); }
|
||||
long a11_l (double f) { return long(f); }
|
||||
unsigned long a11_ul (double f) { return (unsigned long)(f); }
|
||||
long long a11_ll (double f) { return (long long)(f); }
|
||||
unsigned long long a11_ull (double f) { return (unsigned long long)(f); }
|
||||
|
||||
std::string a10_d (double f) { return tl::to_string (f); }
|
||||
#if defined(HAVE_QT)
|
||||
QByteArray a10_d_qba (double f) { return tl::to_qstring (tl::to_string (f)).toUtf8 (); }
|
||||
|
|
@ -162,6 +171,14 @@ struct A
|
|||
QStringRef a10_d_qstrref (double f) { m_s = tl::to_qstring (tl::to_string (f)); return QStringRef (&m_s); }
|
||||
#endif
|
||||
std::string a10_f (float f) { return tl::to_string(f); }
|
||||
std::string a10_s (short l) { return tl::to_string(int (l)); }
|
||||
std::string a10_us (unsigned short l) { return tl::to_string(int (l)); }
|
||||
std::string a10_i (int l) { return tl::to_string(l); }
|
||||
std::string a10_ui (unsigned int l) { return tl::to_string(l); }
|
||||
std::string a10_l (long l) { return tl::to_string(l); }
|
||||
std::string a10_ul (unsigned long l) { return tl::to_string(l); }
|
||||
std::string a10_ll (long long l) { return tl::to_string(l); }
|
||||
std::string a10_ull (unsigned long long l) { return tl::to_string(l); }
|
||||
std::string a10_fptr (float *f) { if (f) { *f += 5; return tl::to_string(*f); } else { return "nil"; } }
|
||||
std::string a10_dptr (double *f) { if (f) { *f += 6; return tl::to_string(*f); } else { return "nil"; } }
|
||||
std::string a10_iptr (int *f) { if (f) { *f += 7; return tl::to_string(*f); } else { return "nil"; } }
|
||||
|
|
|
|||
|
|
@ -320,7 +320,7 @@ template <> struct python2c_func<unsigned char> : public python2c_func_cast<unsi
|
|||
template <> struct python2c_func<short> : public python2c_func_cast<short, long> { };
|
||||
template <> struct python2c_func<unsigned short> : public python2c_func_cast<unsigned short, long> { };
|
||||
template <> struct python2c_func<int> : public python2c_func_cast<int, long> { };
|
||||
template <> struct python2c_func<unsigned int> : public python2c_func_cast<unsigned int, long> { };
|
||||
template <> struct python2c_func<unsigned int> : public python2c_func_cast<unsigned int, unsigned long> { };
|
||||
|
||||
template <> PYA_PUBLIC long long python2c_func<long long>::operator() (PyObject *rval);
|
||||
template <> PYA_PUBLIC unsigned long long python2c_func<unsigned long long>::operator() (PyObject *rval);
|
||||
|
|
@ -540,7 +540,7 @@ struct c2python_func<unsigned int>
|
|||
{
|
||||
PyObject *operator() (unsigned int c)
|
||||
{
|
||||
return PyLong_FromLong (long (c));
|
||||
return PyLong_FromUnsignedLong ((unsigned long) (c));
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@
|
|||
|
||||
static void run_pythontest (tl::TestBase *_this, const std::string &fn);
|
||||
|
||||
TEST (1)
|
||||
TEST (basic)
|
||||
{
|
||||
EXPECT_EQ (gsi::has_class ("Value"), true);
|
||||
EXPECT_EQ (gsi::has_class ("DoesNotExist"), false);
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@
|
|||
// windows.h is included before ruby.h ...
|
||||
#include "tlUnitTest.h"
|
||||
|
||||
TEST (1)
|
||||
TEST (basic)
|
||||
{
|
||||
EXPECT_EQ (gsi::has_class ("Value"), true);
|
||||
EXPECT_EQ (gsi::has_class ("DoesNotExist"), false);
|
||||
|
|
|
|||
|
|
@ -412,6 +412,26 @@ class BasicTest(unittest.TestCase):
|
|||
self.assertEqual( a3.a1(), -11 )
|
||||
|
||||
self.assertEqual( a1.a10_d(5.2), "5.2" )
|
||||
self.assertEqual( a1.a10_s(0x70000000), "0" )
|
||||
self.assertEqual( a1.a10_s(0x7fffffff), "-1" )
|
||||
self.assertEqual( a1.a10_us(0x70000000), "0" )
|
||||
self.assertEqual( a1.a10_us(0x7fffffff), "65535" )
|
||||
self.assertEqual( a1.a10_i(-0x80000000), "-2147483648" )
|
||||
self.assertEqual( a1.a10_l(-0x80000000), "-2147483648" )
|
||||
self.assertEqual( a1.a10_ll(-0x80000000), "-2147483648" )
|
||||
self.assertEqual( a1.a10_ui(0xffffffff), "4294967295" )
|
||||
self.assertEqual( a1.a10_ul(0xffffffff), "4294967295" )
|
||||
self.assertEqual( a1.a10_ull(0xffffffff), "4294967295" )
|
||||
self.assertEqual( a1.a11_s(0x70000000), 0 )
|
||||
self.assertEqual( a1.a11_s(0x7fffffff), -1 )
|
||||
self.assertEqual( a1.a11_us(0x70000000), 0 )
|
||||
self.assertEqual( a1.a11_us(0x7fffffff), 65535 )
|
||||
self.assertEqual( a1.a11_i(-0x80000000), -2147483648 )
|
||||
self.assertEqual( a1.a11_l(-0x80000000), -2147483648 )
|
||||
self.assertEqual( a1.a11_ll(-0x80000000), -2147483648 )
|
||||
self.assertEqual( a1.a11_ui(0xffffffff), 4294967295 )
|
||||
self.assertEqual( a1.a11_ul(0xffffffff), 4294967295 )
|
||||
self.assertEqual( a1.a11_ull(0xffffffff), 4294967295 )
|
||||
if "a10_d_qstr" in a1.__dict__:
|
||||
self.assertEqual( a1.a10_d_qstr(5.25), "5.25" )
|
||||
self.assertEqual( a1.a10_d_qstrref(5.2), "5.2" )
|
||||
|
|
|
|||
|
|
@ -308,6 +308,27 @@ class Basic_TestClass < TestBase
|
|||
assert_equal( a2.a1, 11 )
|
||||
assert_equal( a3.a1, -11 )
|
||||
|
||||
assert_equal( a1.a10_s(0x70000000), "0" )
|
||||
assert_equal( a1.a10_s(0x7fffffff), "-1" )
|
||||
assert_equal( a1.a10_us(0x70000000), "0" )
|
||||
assert_equal( a1.a10_us(0x7fffffff), "65535" )
|
||||
assert_equal( a1.a10_i(-0x80000000), "-2147483648" )
|
||||
assert_equal( a1.a10_l(-0x80000000), "-2147483648" )
|
||||
assert_equal( a1.a10_ll(-0x80000000), "-2147483648" )
|
||||
assert_equal( a1.a10_ui(0xffffffff), "4294967295" )
|
||||
assert_equal( a1.a10_ul(0xffffffff), "4294967295" )
|
||||
assert_equal( a1.a10_ull(0xffffffff), "4294967295" )
|
||||
assert_equal( a1.a11_s(0x70000000), 0 )
|
||||
assert_equal( a1.a11_s(0x7fffffff), -1 )
|
||||
assert_equal( a1.a11_us(0x70000000), 0 )
|
||||
assert_equal( a1.a11_us(0x7fffffff), 65535 )
|
||||
assert_equal( a1.a11_i(-0x80000000), -2147483648 )
|
||||
assert_equal( a1.a11_l(-0x80000000), -2147483648 )
|
||||
assert_equal( a1.a11_ll(-0x80000000), -2147483648 )
|
||||
assert_equal( a1.a11_ui(0xffffffff), 4294967295 )
|
||||
assert_equal( a1.a11_ul(0xffffffff), 4294967295 )
|
||||
assert_equal( a1.a11_ull(0xffffffff), 4294967295 )
|
||||
|
||||
assert_equal( a1.a10_d(5.2), "5.2" )
|
||||
if a1.respond_to?(:a10_d_qstr)
|
||||
assert_equal( a1.a10_d_qstr(5.25), "5.25" )
|
||||
|
|
|
|||
Loading…
Reference in New Issue