/*=============================================================================
    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/parse_sexpr_impl.hpp>
#include <scheme/compiler.hpp>
#include <utree/io.hpp>
#include <iostream>
#include <fstream>

///////////////////////////////////////////////////////////////////////////////
//  Main program
///////////////////////////////////////////////////////////////////////////////
int main()
{
    using scheme::utree;

    { // testing the c++ side

        using scheme::if_;
        using scheme::plus;
        using scheme::times;
        using scheme::minus;
        using scheme::lte;
        using scheme::_1;
        using scheme::_2;
        using scheme::lambda;

        BOOST_TEST(plus(11, 22, 33)         ()          == utree(66));
        BOOST_TEST(plus(11, 22, _1)         (33)        == utree(66));
        BOOST_TEST(plus(11, _1, _2)         (22, 33)    == utree(66));
        BOOST_TEST(plus(11, plus(_1, _2))   (22, 33)    == utree(66));

        lambda factorial;
        factorial = if_(lte(_1, 0), 1, times(_1, factorial(minus(_1, 1))));

        BOOST_TEST(factorial(_1)            (10)        == utree(3628800));
    }

    return boost::report_errors();
}



