diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/dimension/demo.pov | 12 | ||||
-rwxr-xr-x | tests/dimension/demo.sh | 17 | ||||
-rw-r--r-- | tests/dimension/integer-overflow.pov | 25 | ||||
-rwxr-xr-x | tests/dimension/integer-overflow.sh | 35 | ||||
-rw-r--r-- | tests/libdimension/render.c | 15 |
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( |