summaryrefslogtreecommitdiffstats
path: root/tests/dimension
diff options
context:
space:
mode:
Diffstat (limited to 'tests/dimension')
-rw-r--r--tests/dimension/Makefile.am10
-rw-r--r--tests/dimension/csg.pov65
-rwxr-xr-xtests/dimension/csg.sh85
-rwxr-xr-xtests/dimension/demo.sh3
4 files changed, 161 insertions, 2 deletions
diff --git a/tests/dimension/Makefile.am b/tests/dimension/Makefile.am
index bb4aa0f..44afead 100644
--- a/tests/dimension/Makefile.am
+++ b/tests/dimension/Makefile.am
@@ -19,7 +19,14 @@
INCLUDES = -I$(top_srcdir)/libdimension
-TESTS = punctuation.sh numeric.sh strings.sh labels.sh directives.sh arithexp.sh demo.sh
+TESTS = punctuation.sh \
+ numeric.sh \
+ strings.sh \
+ labels.sh \
+ directives.sh \
+ arithexp.sh \
+ csg.sh \
+ demo.sh
TESTS_ENVIRONMENT = top_builddir=$(top_builddir)
.sh:
@@ -33,6 +40,7 @@ EXTRA_DIST = $(TESTS) \
directives.inc \
directives.pov \
arithexp.pov \
+ csg.pov \
demo.pov
clean-local:
diff --git a/tests/dimension/csg.pov b/tests/dimension/csg.pov
new file mode 100644
index 0000000..046510f
--- /dev/null
+++ b/tests/dimension/csg.pov
@@ -0,0 +1,65 @@
+/*************************************************************************
+ * Copyright (C) 2010 Tavian Barnes <tavianator@gmail.com> *
+ * *
+ * 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 <http://www.gnu.org/licenses/>. *
+ *************************************************************************/
+
+// Test constructive solid geometry
+
+camera {
+ perspective
+ location -4*z
+ right 1.6*x
+ look_at 0
+}
+
+background {
+ color rgbf <0, 0.1, 0.2, 0.1>
+}
+
+/* One-object unions */
+
+union {
+ sphere {
+ -1.5*x, 1
+ pigment { color red 1 }
+ }
+}
+
+union {
+ light_source {
+ 20*y, color rgb 0.5
+ }
+}
+
+/* CSG with lights */
+difference {
+ light_source {
+ -15*x, color rgb 0.5
+ }
+ sphere {
+ 1.5*x - 20*y, 1
+ pigment { color green 1 }
+ }
+ light_source {
+ 15*x, color rgb 0.5
+ }
+ box {
+ <0.7, -20.8, -0.8>, <2.3, -19.2, 0.8>
+ pigment { color blue 1 }
+ }
+ translate 20*y
+}
diff --git a/tests/dimension/csg.sh b/tests/dimension/csg.sh
new file mode 100755
index 0000000..c27e448
--- /dev/null
+++ b/tests/dimension/csg.sh
@@ -0,0 +1,85 @@
+#!/bin/sh
+
+#########################################################################
+# Copyright (C) 2010 Tavian Barnes <tavianator@gmail.com> #
+# #
+# 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 <http://www.gnu.org/licenses/>. #
+#########################################################################
+
+csg=$(${top_builddir}/dimension/dimension --parse ${srcdir}/csg.pov)
+csg_exp="$(echo -n \
+'((camera
+ perspective
+ (location (vector (integer 0) (integer 0) (integer -4)
+ (integer 0) (integer 0)))
+ (right (vector (float 1.6) (float 0) (float 0) (float 0) (float 0)))
+ (look_at (vector (integer 0) (integer 0) (integer 0)
+ (integer 0) (integer 0))))
+ (background
+ (vector (integer 0) (float 0.1) (float 0.2) (float 0.1) (integer 0)))
+ (union
+ (array
+ (sphere
+ (vector (float -1.5) (float 0) (float 0) (float 0) (float 0))
+ (integer 1)
+ (object-modifiers
+ (pigment
+ (vector (integer 1) (integer 0) (integer 0)
+ (integer 0) (integer 0))))))
+ object-modifiers)
+ (union
+ (array
+ (light_source
+ (vector (integer 0) (integer 20) (integer 0) (integer 0) (integer 0))
+ (vector (float 0.5) (float 0.5) (float 0.5) (integer 0) (integer 0))
+ object-modifiers))
+ object-modifiers)
+ (difference
+ (array
+ (light_source
+ (vector (integer -15) (integer 0) (integer 0) (integer 0) (integer 0))
+ (vector (float 0.5) (float 0.5) (float 0.5) (integer 0) (integer 0))
+ object-modifiers)
+ (sphere
+ (vector (float 1.5) (float -20) (float 0) (float 0) (float 0))
+ (integer 1)
+ (object-modifiers
+ (pigment
+ (vector (integer 0) (integer 1) (integer 0)
+ (integer 0) (integer 0)))))
+ (light_source
+ (vector (integer 15) (integer 0) (integer 0) (integer 0) (integer 0))
+ (vector (float 0.5) (float 0.5) (float 0.5) (integer 0) (integer 0))
+ object-modifiers)
+ (box
+ (vector (float 0.7) (float -20.8) (float -0.8) (integer 0) (integer 0))
+ (vector (float 2.3) (float -19.2) (float 0.8) (integer 0) (integer 0))
+ (object-modifiers
+ (pigment
+ (vector (integer 0) (integer 0) (integer 1)
+ (integer 0) (integer 0))))))
+ (object-modifiers
+ (translate (vector (integer 0) (integer 20) (integer 0)
+ (integer 0) (integer 0))))))' \
+| tr '\n' ' ' | sed -r 's/[[:space:]]+/ /g')"
+
+if [ "$csg" != "$csg_exp" ]; then
+ echo "csg.pov parsed as \"$csg\"" >&2
+ echo " -- expected \"$csg_exp\"" >&2
+ exit 1
+fi
+
+${top_builddir}/dimension/dimension -w768 -h480 -o csg.png ${srcdir}/csg.pov
diff --git a/tests/dimension/demo.sh b/tests/dimension/demo.sh
index 687d43c..7e9306a 100755
--- a/tests/dimension/demo.sh
+++ b/tests/dimension/demo.sh
@@ -34,7 +34,8 @@ demo_exp=$(echo -n \
(vector (integer 0) (float 0.1) (float 0.2) (float 0.1) (integer 0)))
(light_source
(vector (integer -15) (integer 20) (integer 10) (integer 0) (integer 0))
- (vector (integer 1) (integer 1) (integer 1) (integer 0) (integer 0)))
+ (vector (integer 1) (integer 1) (integer 1) (integer 0) (integer 0))
+ object-modifiers)
(difference
(array
(box