From 065846d055c9c0956fe4bf1762d81a4b72b5d5a8 Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Mon, 16 May 2011 15:30:23 -0600 Subject: Split python Scenes into a new source file, add python tests. --- .gitignore | 1 + configure.ac | 3 +- libdimension-python/Makefile.am | 6 ++ libdimension-python/dimension.c | 50 ++++------------ libdimension-python/scene.c | 106 ++++++++++++++++++++++++++++++++++ libdimension-python/tests/Makefile.am | 29 ++++++++++ libdimension-python/tests/demo.py | 24 ++++++++ 7 files changed, 178 insertions(+), 41 deletions(-) create mode 100644 libdimension-python/scene.c create mode 100644 libdimension-python/tests/Makefile.am create mode 100755 libdimension-python/tests/demo.py diff --git a/.gitignore b/.gitignore index 4f2d95b..699cab2 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,7 @@ Makefile.in # Documentation files created by make /*/doc Doxyfile +__pycache__ # pkg-config files *.pc diff --git a/configure.ac b/configure.ac index 2d566a1..4a6cdd6 100644 --- a/configure.ac +++ b/configure.ac @@ -181,5 +181,6 @@ AC_CONFIG_FILES([Makefile libdimension/bench/Makefile libdimension/libdimension.pc libdimension/tests/Makefile - libdimension-python/Makefile]) + libdimension-python/Makefile + libdimension-python/tests/Makefile]) AC_OUTPUT diff --git a/libdimension-python/Makefile.am b/libdimension-python/Makefile.am index a362964..adb792b 100644 --- a/libdimension-python/Makefile.am +++ b/libdimension-python/Makefile.am @@ -17,6 +17,9 @@ ## along with this program. If not, see . ## ########################################################################### +SUBDIRS = . \ + tests + INCLUDES = -I$(top_srcdir)/libdimension AM_CFLAGS = $(Python_CFLAGS) @@ -25,3 +28,6 @@ AM_LDFLAGS = $(Python_LDFLAGS) pyexec_LTLIBRARIES = dimension.la dimension_la_SOURCES = dimension.c dimension_la_LDFLAGS = -avoid-version -module +dimension_la_LIBADD = $(top_builddir)/libdimension/libdimension.la + +EXTRA_DIST = scene.c diff --git a/libdimension-python/dimension.c b/libdimension-python/dimension.c index 35b9f4c..81174a7 100644 --- a/libdimension-python/dimension.c +++ b/libdimension-python/dimension.c @@ -1,15 +1,15 @@ /************************************************************************* * Copyright (C) 2009-2011 Tavian Barnes * * * - * This file is part of The Dimension Python Extension. * + * This file is part of The Dimension Python Module. * * * - * The Dimension Python Extension is free software; you can redistribute * - * it and/ or modify it under the terms of the GNU Lesser General Public * + * The Dimension Python Module is free software; you can redistribute it * + * and/ or modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either version * * 3 of the License, or (at your option) any later version. * * * - * The Dimension Python Extension is distributed in the hope that it * - * will be useful, but WITHOUT ANY WARRANTY; without even the implied * + * The Dimension Python Module is distributed in the hope that it will * + * be useful, but WITHOUT ANY WARRANTY; without even the implied * * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See * * the GNU Lesser General Public License for more details. * * * @@ -19,39 +19,13 @@ *************************************************************************/ #include +#include #include "dimension.h" -typedef struct { - PyObject_HEAD - dmnsn_scene *scene; -} dmnsn_SceneObject; - -static PyTypeObject dmnsn_SceneType = { - PyVarObject_HEAD_INIT(NULL, 0) - "dimension.Scene", /* tp_name */ - sizeof(dmnsn_SceneObject), /* tp_basicsize */ - 0, /* tp_itemsize */ - 0, /* tp_dealloc */ - 0, /* tp_print */ - 0, /* tp_getattr */ - 0, /* tp_setattr */ - 0, /* tp_reserved */ - 0, /* tp_repr */ - 0, /* tp_as_number */ - 0, /* tp_as_sequence */ - 0, /* tp_as_mapping */ - 0, /* tp_hash */ - 0, /* tp_call */ - 0, /* tp_str */ - 0, /* tp_getattro */ - 0, /* tp_setattro */ - 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT, /* tp_flags */ - "Dimension scene", /* tp_doc */ -}; +#include "scene.c" static PyMethodDef DimensionMethods[] = { - { NULL, NULL, 0, NULL } /* Sentinel */ + { NULL, NULL, 0, NULL } }; static struct PyModuleDef dimensionmodule = { @@ -65,17 +39,13 @@ static struct PyModuleDef dimensionmodule = { PyMODINIT_FUNC PyInit_dimension(void) { - dmnsn_SceneType.tp_new = PyType_GenericNew; - if (PyType_Ready(&dmnsn_SceneType) < 0) { + if (!dmnsn_init_SceneType()) return NULL; - } PyObject *m = PyModule_Create(&dimensionmodule); - if (!m) { + if (!m) return NULL; - } - Py_INCREF(&dmnsn_SceneType); PyModule_AddObject(m, "Scene", (PyObject *)&dmnsn_SceneType); return m; } diff --git a/libdimension-python/scene.c b/libdimension-python/scene.c new file mode 100644 index 0000000..f742173 --- /dev/null +++ b/libdimension-python/scene.c @@ -0,0 +1,106 @@ +/************************************************************************* + * Copyright (C) 2009-2011 Tavian Barnes * + * * + * This file is part of The Dimension Python Module. * + * * + * The Dimension Python Module is free software; you can redistribute it * + * and/ or modify it under the terms of the GNU Lesser General Public * + * License as published by the Free Software Foundation; either version * + * 3 of the License, or (at your option) any later version. * + * * + * The Dimension Python Module is distributed in the hope that it will * + * be useful, but WITHOUT ANY WARRANTY; without even the implied * + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See * + * the GNU Lesser General Public License for more details. * + * * + * You should have received a copy of the GNU Lesser General Public * + * License along with this program. If not, see * + * . * + *************************************************************************/ + +typedef struct { + PyObject_HEAD + dmnsn_scene *scene; +} dmnsn_SceneObject; + +static PyObject * +dmnsn_SceneNew(PyTypeObject *type, PyObject *args, PyObject *kwds) +{ + dmnsn_SceneObject *self; + self = (dmnsn_SceneObject *)type->tp_alloc(type, 0); + self->scene = dmnsn_new_scene(); + return (PyObject *)self; +} + +static int +dmnsn_SceneInit(dmnsn_SceneObject *self, PyObject *args, PyObject *kwds) +{ + return 0; +} + +static void +dmnsn_SceneDealloc(dmnsn_SceneObject *self) +{ + dmnsn_delete_scene(self->scene); + Py_TYPE(self)->tp_free((PyObject *)self); +} + +static PyMemberDef dmnsn_SceneMembers[] = { + { NULL } +}; + +static PyMethodDef dmnsn_SceneMethods[] = { + { NULL } +}; + +static PyGetSetDef dmnsn_SceneGetSetters[] = { + { NULL } +}; + +static PyTypeObject dmnsn_SceneType = { + PyVarObject_HEAD_INIT(NULL, 0) + "dimension.Scene", /* tp_name */ + sizeof(dmnsn_SceneObject), /* tp_basicsize */ + 0, /* tp_itemsize */ + (destructor)dmnsn_SceneDealloc, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_reserved */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT, /* tp_flags */ + "Dimension scene", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + dmnsn_SceneMethods, /* tp_methods */ + dmnsn_SceneMembers, /* tp_members */ + dmnsn_SceneGetSetters, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + (initproc)dmnsn_SceneInit, /* tp_init */ + 0, /* tp_alloc */ + dmnsn_SceneNew, /* tp_new */ +}; + +static bool +dmnsn_init_SceneType(void) +{ + Py_INCREF(&dmnsn_SceneType); + return PyType_Ready(&dmnsn_SceneType) >= 0; +} diff --git a/libdimension-python/tests/Makefile.am b/libdimension-python/tests/Makefile.am new file mode 100644 index 0000000..4bebfda --- /dev/null +++ b/libdimension-python/tests/Makefile.am @@ -0,0 +1,29 @@ +########################################################################### +## Copyright (C) 2009-2011 Tavian Barnes ## +## ## +## This file is part of The Dimension Build Suite. ## +## ## +## The Dimension Build Suite is free software; you can redistribute it ## +## and/or modify it under the terms of the GNU General Public License as ## +## published by the Free Software Foundation; either version 3 of the ## +## License, or (at your option) any later version. ## +## ## +## The Dimension Build Suite is distributed in the hope that it will be ## +## useful, but WITHOUT ANY WARRANTY; without even the implied warranty ## +## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## +## General Public License for more details. ## +## ## +## You should have received a copy of the GNU General Public License ## +## along with this program. If not, see . ## +########################################################################### + +TESTS = demo.py +TESTS_ENVIRONMENT = PYTHONPATH=$(top_builddir)/libdimension-python/.libs + +.py: + cp $(srcdir)/$@ . + +EXTRA_DIST = $(TESTS) + +clean-local: + rm -f *.png diff --git a/libdimension-python/tests/demo.py b/libdimension-python/tests/demo.py new file mode 100755 index 0000000..10fe2ed --- /dev/null +++ b/libdimension-python/tests/demo.py @@ -0,0 +1,24 @@ +#!/usr/bin/python3 + +######################################################################### +# Copyright (C) 2010-2011 Tavian Barnes # +# # +# This file is part of The Dimension Test Suite. # +# # +# The Dimension Test Suite is free software; you can redistribute it # +# and/or modify it under the terms of the GNU General Public License as # +# published by the Free Software Foundation; either version 3 of the # +# License, or (at your option) any later version. # +# # +# The Dimension Test Suite is distributed in the hope that it will be # +# useful, but WITHOUT ANY WARRANTY; without even the implied warranty # +# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # +# General Public License for more details. # +# # +# You should have received a copy of the GNU General Public License # +# along with this program. If not, see . # +######################################################################### + +from dimension import * + +scene = Scene() -- cgit v1.2.3