/*
Copyright (c) 2013 Microsoft Corporation. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.

Author: Leonardo de Moura
*/
#include <iostream>
#include <lean/stackinfo.h>
#include "util/test.h"
using namespace lean;

static char foo(int i) {
    #define SZ_FOO 1000000
    char buffer[SZ_FOO];
    buffer[i] = i;
    std::cout << get_available_stack_size() << "\n";
    return buffer[i];
}

static char bar(int i) {
    #define SZ_BAR 10000
    char buffer[SZ_BAR];
    buffer[i] = i;
    std::cout << get_available_stack_size() << "\n";
    return buffer[i];
}

static void tst1() {
    std::cout << get_available_stack_size() << "\n";
    foo(10);
    std::cout << get_available_stack_size() << "\n";
}

static void tst2() {
    std::cout << get_available_stack_size() << "\n";
    bar(10);
    std::cout << get_available_stack_size() << "\n";
}

int main() {
    save_stack_info();
    tst1();
    save_stack_info();
    tst2();
    return has_violations() ? 1 : 0;
}
