From d8a7aef46b219320b1727a06bf90cc81764320ee Mon Sep 17 00:00:00 2001 From: "John J. Camilleri" Date: Mon, 13 Sep 2021 15:47:15 +0200 Subject: [PATCH] Add constructor for ExprLit, use it in tests --- src/runtime/python/expr.c | 27 +++++++++++++++++++++++++-- src/runtime/python/test_suite.py | 18 +++++++++--------- 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/src/runtime/python/expr.c b/src/runtime/python/expr.c index 66225437f..35d1fadf9 100644 --- a/src/runtime/python/expr.c +++ b/src/runtime/python/expr.c @@ -125,6 +125,29 @@ PyTypeObject pgf_ExprType = { // ---------------------------------------------------------------------------- +static ExprLitObject * +ExprLit_new(PyTypeObject *subtype, PyObject *args, PyObject *kwds) +{ + ExprLitObject* self = (ExprLitObject *)subtype->tp_alloc(subtype, 0); + return self; +} + +static int +ExprLit_init(ExprLitObject *self, PyObject *args, PyObject *kwds) +{ + PyObject* lit = NULL; + if (!PyArg_ParseTuple(args, "O", &lit)) { + return -1; + } + if (PyLong_Check(lit) || PyFloat_Check(lit) || PyUnicode_Check(lit)) { + self->value = lit; + return 0; + } else { + PyErr_SetString(PyExc_TypeError, "invalid argument in ExprLit_init"); + return -1; + } +} + static PyObject * ExprLit_richcompare(ExprLitObject *t1, ExprLitObject *t2, int op) { @@ -197,9 +220,9 @@ PyTypeObject pgf_ExprLitType = { 0, /*tp_descr_get */ 0, /*tp_descr_set */ 0, /*tp_dictoffset */ - 0, //(initproc)Expr_init, /*tp_init */ + (initproc) ExprLit_init, /*tp_init */ 0, /*tp_alloc */ - 0, //(newfunc) Expr_new, /*tp_new */ + (newfunc) ExprLit_new, /*tp_new */ }; // ---------------------------------------------------------------------------- diff --git a/src/runtime/python/test_suite.py b/src/runtime/python/test_suite.py index dbdb19472..4f7c8fc18 100644 --- a/src/runtime/python/test_suite.py +++ b/src/runtime/python/test_suite.py @@ -162,31 +162,31 @@ def test_readExpr_invalid(): pgf.readExpr("->") def test_readExpr_equality_int(): - assert pgf.readExpr("123") == pgf.readExpr("123") + assert pgf.readExpr("123") == pgf.ExprLit(123) def test_readExpr_equality_int_neg(): - assert pgf.readExpr("-123") == pgf.readExpr("-123") + assert pgf.readExpr("-123") == pgf.ExprLit(-123) def test_readExpr_equality_int_big(): - assert pgf.readExpr("774763251095801167872") == pgf.readExpr("774763251095801167872") + assert pgf.readExpr("774763251095801167872") == pgf.ExprLit(774763251095801167872) def test_readExpr_equality_int_big_neg(): - assert pgf.readExpr("-774763251095801167872") == pgf.readExpr("-774763251095801167872") + assert pgf.readExpr("-774763251095801167872") == pgf.ExprLit(-774763251095801167872) def test_readExpr_inequality_int(): - assert pgf.readExpr("123") != pgf.readExpr("456") + assert pgf.readExpr("123") != pgf.ExprLit(456) def test_readExpr_equality_float(): - assert pgf.readExpr("3.142") == pgf.readExpr("3.142") + assert pgf.readExpr("3.142") == pgf.ExprLit(3.142) def test_readExpr_inequality_float(): - assert pgf.readExpr("3.142") != pgf.readExpr("3") + assert pgf.readExpr("3.142") != pgf.ExprLit(3) def test_readExpr_equality_string(): - assert pgf.readExpr("\"abc\"") == pgf.readExpr("\"abc\"") + assert pgf.readExpr("\"abc\"") == pgf.ExprLit("abc") def test_readExpr_inequality_string(): - assert pgf.readExpr("\"abc\"") != pgf.readExpr("\"def\"") + assert pgf.readExpr("\"abc\"") != pgf.ExprLit("def") def test_readExpr_str_int(): assert str(pgf.readExpr("123")) == "123"