// Dateien einbinden
#include <print>
#include <exception>

import Stack;

int main()
{
    // Zeiger auf short-Stack
    Stack *pStack;

    // short-Stack mit 5 Elementen anlegen
    try
    {
        pStack = new Stack(5);
    }
    // Falls Fehler beim Anlegen des Stack aufgetreten
    // Meldung ausgeben und Programm beenden
    catch(const std::length_error& ex)
    {
        std::println("{}",ex.what());
        exit(1);
    }
    // Stack nun komplett füllen
    // Falls Stack voll ist wird Ausnahme ausgelöst
    std::println("Fuelle Stack:");
    try
    {
        short index = 10;
        for (;;)
            pStack->Push(index++);
    }
    catch(const std::out_of_range& ex)
    {
        std::println("{}",ex.what());
    }
    // Stack jetzt wieder leeren
    // Falls Stack leer wird Ausnahme ausgelöst
    std::println("Leere Stack:");
    try
    {
        for (;;)
            std::print("{}, ",pStack->Pop());
    }
    catch(const std::out_of_range& ex)
    {
        std::println("{}",ex.what());
    }
    // Stack löschen
    delete pStack;

    // Versuche zu grossen Stack anzulegen
    std::println("Lege grossen Stack an:");
    try
    {
        Stack hugeStack(1000);
    }
    catch(const std::length_error& ex)
    {
        std::println("{}",ex.what());
        exit(1);
    }
}
