summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorTavian Barnes <tavianator@gmail.com>2009-04-12 15:42:04 +0000
committerTavian Barnes <tavianator@gmail.com>2009-04-12 15:42:04 +0000
commit4f9f95a05a41bfbcc9965eaaf7f2d14c6af9f261 (patch)
treec5d3d649d36e6102708d0f86edb87499e1ff8c3e /tests
parent510c9a95fb5f3f4a40a19ce66c95344c2013085f (diff)
downloaddimension-4f9f95a05a41bfbcc9965eaaf7f2d14c6af9f261.tar.xz
Write C++ libdimension-png wrapper.
Diffstat (limited to 'tests')
-rw-r--r--tests/Makefile.am7
-rw-r--r--tests/png.c4
-rwxr-xr-xtests/pngxx148
-rw-r--r--tests/pngxx.cpp102
4 files changed, 257 insertions, 4 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am
index f23b469..a11f18a 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -17,11 +17,11 @@
## along with this program. If not, see <http://www.gnu.org/licenses/>. ##
###########################################################################
-check_PROGRAMS = warning error png
+check_PROGRAMS = warning error png pngxx
TESTS = $(check_PROGRAMS)
XFAIL_TESTS = error
-INCLUDES = -I../libdimension -I../libdimension-png
+INCLUDES = -I../libdimension -I../libdimension-png -I../libdimensionxx
warning_SOURCES = warning.c
warning_LDADD = ../libdimension/libdimension.la
@@ -31,3 +31,6 @@ error_LDADD = ../libdimension/libdimension.la
png_SOURCES = png.c
png_LDADD = ../libdimension/libdimension.la ../libdimension-png/libdimension-png.la
+
+pngxx_SOURCES = pngxx.cpp
+pngxx_LDADD = ../libdimensionxx/libdimensionxx.la
diff --git a/tests/png.c b/tests/png.c
index b7edd95..0ee7edb 100644
--- a/tests/png.c
+++ b/tests/png.c
@@ -33,7 +33,7 @@ int main() {
dmnsn_sRGB sRGB;
FILE *ofile, *ifile;
unsigned int i, j;
- const unsigned int x = 300, y = 300;
+ const unsigned int x = 333, y = 300;
dmnsn_set_resilience(DMNSN_SEVERITY_LOW);
@@ -121,7 +121,7 @@ int main() {
return EXIT_FAILURE;
}
- if (dmnsn_png_read_canvas(&canvas, ifile)) {
+ if (!(canvas = dmnsn_png_read_canvas(ifile))) {
fprintf(stderr, "--- Reading canvas failed! ---\n");
return EXIT_FAILURE;
}
diff --git a/tests/pngxx b/tests/pngxx
new file mode 100755
index 0000000..436e7d8
--- /dev/null
+++ b/tests/pngxx
@@ -0,0 +1,148 @@
+#! /bin/sh
+
+# pngxx - temporary wrapper script for .libs/pngxx
+# Generated by ltmain.sh (GNU libtool) 2.2.6
+#
+# The pngxx program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting. It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='/bin/sed -e 1s/^X//'
+sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+ # is contrary to our usage. Disable this feature.
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+relink_command="(cd /home/tavianator/dimension/tests; { test -z \"\${LIBRARY_PATH+set}\" || unset LIBRARY_PATH || { LIBRARY_PATH=; export LIBRARY_PATH; }; }; { test -z \"\${COMPILER_PATH+set}\" || unset COMPILER_PATH || { COMPILER_PATH=; export COMPILER_PATH; }; }; { test -z \"\${GCC_EXEC_PREFIX+set}\" || unset GCC_EXEC_PREFIX || { GCC_EXEC_PREFIX=; export GCC_EXEC_PREFIX; }; }; { test -z \"\${LD_RUN_PATH+set}\" || unset LD_RUN_PATH || { LD_RUN_PATH=; export LD_RUN_PATH; }; }; { test -z \"\${LD_LIBRARY_PATH+set}\" || unset LD_LIBRARY_PATH || { LD_LIBRARY_PATH=; export LD_LIBRARY_PATH; }; }; PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/bin/perlbin/site:/usr/bin/perlbin/vendor:/usr/bin/perlbin/core:/opt/qt/bin; export PATH; g++ -g -O2 -o \$progdir/\$file pngxx.o ../libdimensionxx/.libs/libdimensionxx.so /home/tavianator/dimension/libdimension/.libs/libdimension.so -lm -lpthread /home/tavianator/dimension/libdimension-png/.libs/libdimension-png.so -lpng -Wl,-rpath -Wl,/home/tavianator/dimension/libdimensionxx/.libs -Wl,-rpath -Wl,/home/tavianator/dimension/libdimension/.libs -Wl,-rpath -Wl,/home/tavianator/dimension/libdimension-png/.libs)"
+
+# This environment variable determines our operation mode.
+if test "$libtool_install_magic" = "%%%MAGIC variable%%%"; then
+ # install mode needs the following variables:
+ generated_by_libtool_version='2.2.6'
+ notinst_deplibs=' ../libdimensionxx/libdimensionxx.la /home/tavianator/dimension/libdimension/libdimension.la /home/tavianator/dimension/libdimension-png/libdimension-png.la'
+else
+ # When we are sourced in execute mode, $file and $ECHO are already set.
+ if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then
+ ECHO="echo"
+ file="$0"
+ # Make sure echo works.
+ if test "X$1" = X--no-reexec; then
+ # Discard the --no-reexec flag, and continue.
+ shift
+ elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then
+ # Yippee, $ECHO works!
+ :
+ else
+ # Restart under the correct shell, and then maybe $ECHO will work.
+ exec /bin/sh "$0" --no-reexec ${1+"$@"}
+ fi
+ fi
+
+ # Find the directory that this script lives in.
+ thisdir=`$ECHO "X$file" | $Xsed -e 's%/[^/]*$%%'`
+ test "x$thisdir" = "x$file" && thisdir=.
+
+ # Follow symbolic links until we get to the real thisdir.
+ file=`ls -ld "$file" | /bin/sed -n 's/.*-> //p'`
+ while test -n "$file"; do
+ destdir=`$ECHO "X$file" | $Xsed -e 's%/[^/]*$%%'`
+
+ # If there was a directory component, then change thisdir.
+ if test "x$destdir" != "x$file"; then
+ case "$destdir" in
+ [\\/]* | [A-Za-z]:[\\/]*) thisdir="$destdir" ;;
+ *) thisdir="$thisdir/$destdir" ;;
+ esac
+ fi
+
+ file=`$ECHO "X$file" | $Xsed -e 's%^.*/%%'`
+ file=`ls -ld "$thisdir/$file" | /bin/sed -n 's/.*-> //p'`
+ done
+
+
+ # Usually 'no', except on cygwin/mingw when embedded into
+ # the cwrapper.
+ WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=no
+ if test "$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR" = "yes"; then
+ # special case for '.'
+ if test "$thisdir" = "."; then
+ thisdir=`pwd`
+ fi
+ # remove .libs from thisdir
+ case "$thisdir" in
+ *[\\/].libs ) thisdir=`$ECHO "X$thisdir" | $Xsed -e 's%[\\/][^\\/]*$%%'` ;;
+ .libs ) thisdir=. ;;
+ esac
+ fi
+
+ # Try to get the absolute directory name.
+ absdir=`cd "$thisdir" && pwd`
+ test -n "$absdir" && thisdir="$absdir"
+
+ program=lt-'pngxx'
+ progdir="$thisdir/.libs"
+
+ if test ! -f "$progdir/$program" ||
+ { file=`ls -1dt "$progdir/$program" "$progdir/../$program" 2>/dev/null | /bin/sed 1q`; \
+ test "X$file" != "X$progdir/$program"; }; then
+
+ file="$$-$program"
+
+ if test ! -d "$progdir"; then
+ mkdir "$progdir"
+ else
+ rm -f "$progdir/$file"
+ fi
+
+ # relink executable if necessary
+ if test -n "$relink_command"; then
+ if relink_command_output=`eval $relink_command 2>&1`; then :
+ else
+ echo "$relink_command_output" >&2
+ rm -f "$progdir/$file"
+ exit 1
+ fi
+ fi
+
+ mv -f "$progdir/$file" "$progdir/$program" 2>/dev/null ||
+ { rm -f "$progdir/$program";
+ mv -f "$progdir/$file" "$progdir/$program"; }
+ rm -f "$progdir/$file"
+ fi
+
+ if test -f "$progdir/$program"; then
+ if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then
+ # Run the actual program with our arguments.
+
+ exec "$progdir/$program" ${1+"$@"}
+
+ $ECHO "$0: cannot exec $program $*" 1>&2
+ exit 1
+ fi
+ else
+ # The program doesn't exist.
+ $ECHO "$0: error: \`$progdir/$program' does not exist" 1>&2
+ $ECHO "This script is just a wrapper for $program." 1>&2
+ echo "See the libtool documentation for more information." 1>&2
+ exit 1
+ fi
+fi
diff --git a/tests/pngxx.cpp b/tests/pngxx.cpp
new file mode 100644
index 0000000..ed7cffd
--- /dev/null
+++ b/tests/pngxx.cpp
@@ -0,0 +1,102 @@
+/*************************************************************************
+ * Copyright (C) 2008 Tavian Barnes <tavianator@gmail.com> *
+ * *
+ * This file is part of The Dimension Test Suite. *
+ * *
+ * Dimension 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. *
+ * *
+ * Dimension 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 *
+ * <http://www.gnu.org/licenses/>. *
+ *************************************************************************/
+
+#include "../libdimensionxx/dimensionxx.hpp"
+#include <fstream>
+
+int
+main()
+{
+ dmnsn_set_resilience(DMNSN_SEVERITY_LOW);
+
+ const unsigned int width = 333, height = 300;
+
+ {
+ std::ofstream ofstr("dimensionxx1.png", std::ios::binary);
+ Dimension::PNG_Canvas ocanvas(3*width, height, ofstr);
+
+ Dimension::CIE_xyY xyY;
+ Dimension::CIE_Lab Lab;
+ Dimension::CIE_Luv Luv;
+ Dimension::sRGB RGB;
+ Dimension::Color color;
+
+ for (unsigned int x = 0; x < width; ++x) {
+ for (unsigned int y = 0; y < height; ++y) {
+ /* CIE xyY colorspace */
+ xyY = Dimension::CIE_xyY(static_cast<double>(x)/(width - 1),
+ static_cast<double>(y)/(height - 1),
+ 0.5);
+ color = xyY;
+ RGB = color;
+
+ if (RGB.R() > 1.0 || RGB.G() > 1.0 || RGB.B() > 1.0
+ || RGB.R() < 0.0 || RGB.G() < 0.0 || RGB.B() < 0.0) {
+ /* Out of sRGB gamut */
+ color.trans(0.5);
+ }
+
+ ocanvas.pixel(x, y, color);
+
+ /* CIE Lab colorspace */
+
+ Lab = Dimension::CIE_Lab(75.0,
+ 200.0*(static_cast<double>(x)/
+ (width - 1) - 0.5),
+ 200.0*(static_cast<double>(y)/
+ (height - 1) - 0.5));
+ color = Lab;
+ RGB = color;
+
+ if (RGB.R() > 1.0 || RGB.G() > 1.0 || RGB.B() > 1.0
+ || RGB.R() < 0.0 || RGB.G() < 0.0 || RGB.B() < 0.0) {
+ /* Out of sRGB gamut */
+ color.trans(0.5);
+ }
+
+ ocanvas.pixel(x + width, y, color);
+
+ /* CIE Luv colorspace */
+
+ Luv = Dimension::CIE_Luv(75.0,
+ 200.0*(static_cast<double>(x)/
+ (width - 1) - 0.5),
+ 200.0*(static_cast<double>(y)/
+ (height - 1) - 0.5));
+ color = Luv;
+ RGB = color;
+
+ if (RGB.R() > 1.0 || RGB.G() > 1.0 || RGB.B() > 1.0
+ || RGB.R() < 0.0 || RGB.G() < 0.0 || RGB.B() < 0.0) {
+ /* Out of sRGB gamut */
+ color.trans(0.5);
+ }
+
+ ocanvas.pixel(x + 2*width, y, color);
+ }
+ }
+ }
+
+ std::ifstream ifstr("dimensionxx1.png", std::ios::binary);
+ std::ofstream ofstr("dimensionxx2.png", std::ios::binary);
+ Dimension::PNG_Canvas iocanvas(ifstr, ofstr);
+
+ return 0;
+}