public class UjiMurni {
    // Murni: hasil hanya dari dua argumen
    static int totalDiskon(int harga, int persen) {
        return harga * persen / 100;
    }

    // Keadaan luar yang dibaca dan diubah fungsi berikut
    static int diskonTercatat = 0;

    // Tidak murni: mengembalikan nilai DAN mengubah keadaan luar
    static int diskonDenganLog(int harga, int persen) {
        int hasil = harga * persen / 100;
        diskonTercatat += hasil;
        return hasil;
    }

    public static void main(String[] args) {
        // Menguji fungsi murni: panggil, bandingkan, selesai
        System.out.println("totalDiskon(100000, 10) == 10000 : "
                + (totalDiskon(100000, 10) == 10000));

        // Menguji fungsi ber-efek: nilai kembalian sama, keadaan luar berubah
        System.out.println("diskonDenganLog(100000, 10)      : "
                + diskonDenganLog(100000, 10));
        System.out.println("keadaan diskonTercatat           : " + diskonTercatat);
        System.out.println("diskonDenganLog(50000, 10)       : "
                + diskonDenganLog(50000, 10));
        System.out.println("keadaan setelahnya               : " + diskonTercatat);
    }
}
