summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/dimension/demo.pov12
-rwxr-xr-xtests/dimension/demo.sh17
-rw-r--r--tests/dimension/integer-overflow.pov25
-rwxr-xr-xtests/dimension/integer-overflow.sh35
-rw-r--r--tests/libdimension/render.c15
5 files changed, 100 insertions, 4 deletions
diff --git a/tests/dimension/demo.pov b/tests/dimension/demo.pov
index 0740ecb..8088f45 100644
--- a/tests/dimension/demo.pov
+++ b/tests/dimension/demo.pov
@@ -29,7 +29,17 @@ camera {
}
background {
- color rgbf <0, 0.1, 0.2, 0.1>
+ color transmit 1
+}
+
+sky_sphere {
+ pigment {
+ gradient y
+ color_map {
+ [0.0 color rgb <1, 0.5, 0>]
+ [0.35 color rgbf <0, 0.1, 0.2, 0.1>]
+ }
+ }
}
light_source {
diff --git a/tests/dimension/demo.sh b/tests/dimension/demo.sh
index 4e26bdc..a741268 100755
--- a/tests/dimension/demo.sh
+++ b/tests/dimension/demo.sh
@@ -32,7 +32,22 @@ demo_exp=$(echo -n \
(rotation (vector (integer 0) (integer 53) (integer 0)
(integer 0) (integer 0)))))
(background
- (vector (integer 0) (float 0.1) (float 0.2) (float 0.1) (integer 0)))
+ (vector (integer 0) (integer 0) (integer 0) (integer 0) (integer 1)))
+ (sky_sphere
+ (pigment
+ (pattern
+ (gradient (vector (integer 0) (integer 1)
+ (integer 0) (integer 0) (integer 0))))
+ (pigment-modifiers
+ (color_map
+ (color_map-entry
+ (float 0)
+ (vector (integer 1) (float 0.5) (integer 0)
+ (integer 0) (integer 0)))
+ (color_map-entry
+ (float 0.35)
+ (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))
diff --git a/tests/dimension/integer-overflow.pov b/tests/dimension/integer-overflow.pov
new file mode 100644
index 0000000..670d659
--- /dev/null
+++ b/tests/dimension/integer-overflow.pov
@@ -0,0 +1,25 @@
+/*************************************************************************
+ * Copyright (C) 2009-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 integer overflow handling -- overflows should convert to floats
+
+torus {
+ 10000000000000000000,
+ abs(-2147483647 - 1)*abs(-9223372036854775807 - 1)*((-2147483647 - 2)*(2147483647 + 1))*((-9223372036854775807.0 - 2)*(9223372036854775807.0 + 1))*(65536*65536)*(4294967296*4294967296.0)
+}
diff --git a/tests/dimension/integer-overflow.sh b/tests/dimension/integer-overflow.sh
new file mode 100755
index 0000000..737c0e2
--- /dev/null
+++ b/tests/dimension/integer-overflow.sh
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+#########################################################################
+# Copyright (C) 2009-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/>. #
+#########################################################################
+
+integer_overflow=$(${top_builddir}/dimension/dimension --parse ${srcdir}/integer-overflow.pov)
+integer_overflow_exp="$(echo -n \
+'((object
+ (torus
+ (float 1e+19)
+ (float 6.15656e+113))
+ object-modifiers))' \
+| tr '\n' ' ' | sed -r 's/[[:space:]]+/ /g')"
+
+if [ "$integer_overflow" != "$integer_overflow_exp" ]; then
+ echo "integer-overflow.pov parsed as \"$integer_overflow\"" >&2
+ echo " -- expected \"$integer_overflow_exp\"" >&2
+ exit 1
+fi
diff --git a/tests/libdimension/render.c b/tests/libdimension/render.c
index 440333c..31518bf 100644
--- a/tests/libdimension/render.c
+++ b/tests/libdimension/render.c
@@ -66,8 +66,19 @@ dmnsn_new_test_scene(void)
scene->camera->trans = trans;
/* Background color */
- scene->background = dmnsn_color_from_sRGB((dmnsn_sRGB){ 0.0, 0.1, 0.2 });
- scene->background.filter = 0.1;
+ scene->background = dmnsn_clear;
+
+ /* Sky sphere */
+ scene->sky_sphere = dmnsn_new_sky_sphere();
+ dmnsn_pattern *sky_gradient = dmnsn_new_gradient_pattern(dmnsn_y);
+ dmnsn_color_map *sky_gradient_color_map = dmnsn_new_color_map();
+ dmnsn_add_color_map_entry(sky_gradient_color_map, 0.0, dmnsn_orange);
+ dmnsn_color background = dmnsn_color_from_sRGB((dmnsn_sRGB){ 0.0, 0.1, 0.2 });
+ background.filter = 0.1;
+ dmnsn_add_color_map_entry(sky_gradient_color_map, 0.35, background);
+ dmnsn_pigment *sky_pigment
+ = dmnsn_new_color_map_pigment(sky_gradient, sky_gradient_color_map);
+ dmnsn_array_push(scene->sky_sphere->pigments, &sky_pigment);
/* Light source */
dmnsn_light *light = dmnsn_new_point_light(