| /*============================================================================= |
| Copyright (c) 2001-2010 Joel de Guzman |
| |
| Distributed under the Boost Software License, Version 1.0. (See accompanying |
| file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) |
| =============================================================================*/ |
| #include <boost/detail/lightweight_test.hpp> |
| #include <boost/config/warning_disable.hpp> |
| |
| #include <input/sexpr.hpp> |
| #include <input/parse_sexpr_impl.hpp> |
| #include <scheme/compiler.hpp> |
| #include <utree/io.hpp> |
| |
| /////////////////////////////////////////////////////////////////////////////// |
| // Main program |
| /////////////////////////////////////////////////////////////////////////////// |
| int main() |
| { |
| using scheme::interpreter; |
| using scheme::utree; |
| |
| { |
| utree src = "(define n 123)"; |
| scheme::interpreter program(src); |
| BOOST_TEST(program["n"]() == 123); |
| } |
| |
| { |
| utree src = "(define (factorial n) (if (<= n 0) 1 (* n (factorial (- n 1)))))"; |
| scheme::interpreter program(src); |
| BOOST_TEST(program["factorial"](10) == 3628800); |
| } |
| |
| { |
| // test forward declaration (a scheme extension) |
| utree src = |
| "(define (dbl n))" // multiple forward declarations allowed |
| "(define (dbl n))" |
| "(define foo (dbl 10))" |
| "(define (dbl n) (* n 2))" |
| ; |
| scheme::interpreter program(src); |
| BOOST_TEST(program["foo"](10) == 20); |
| } |
| |
| return boost::report_errors(); |
| } |
| |
| |