import java.util.ArrayList;
import java.util.List;
import java.util.NoSuchElementException;

public class AplikasiTumpukan {
    public static void main(String[] args) {
        Tumpukan<Number> kotak = new Tumpukan<>();

        // Producer: Iterable<Integer> masuk ke Tumpukan<Number>
        kotak.dorongSemua(List.of(10, 20, 30));
        System.out.println("Ukuran: " + kotak.ukuran());

        // Tipe kembalian konkret: E = Number, bukan wildcard
        Number puncak = kotak.intip();
        System.out.println("Puncak: " + puncak);

        // Consumer: isi mengalir ke List<Object>
        List<Object> hasil = new ArrayList<>();
        kotak.ambilSemua(hasil);
        System.out.println("Hasil : " + hasil);
        System.out.println("Kosong: " + kotak.kosong());

        // Invariant terdokumentasi: ambil pada tumpukan kosong
        try {
            kotak.ambil();
        } catch (NoSuchElementException e) {
            System.out.println("Tertangkap: " + e.getMessage());
        }
    }
}
