public class ContohCoverage {

    // instrumentasi manual: satu penghitung per cabang
    static final int[] kunjunganCabang = new int[3];

    static String kategoriNilai(int nilai) {
        if (nilai >= 80) {
            kunjunganCabang[0]++;
            return "unggul";
        }
        if (nilai >= 60) {
            kunjunganCabang[1]++;
            return "lulus";
        }
        kunjunganCabang[2]++;
        return "remedial";
    }

    static void laporan() {
        String[] label = {
            "nilai >= 80 -> unggul",
            "nilai >= 60 -> lulus",
            "lainnya     -> remedial"
        };
        int cabangTerkunjungi = 0;
        for (int i = 0; i < kunjunganCabang.length; i++) {
            System.out.printf("cabang %-24s : %d kunjungan%n", label[i], kunjunganCabang[i]);
            if (kunjunganCabang[i] > 0) {
                cabangTerkunjungi++;
            }
        }
        System.out.println("branch coverage : "
            + cabangTerkunjungi + "/" + kunjunganCabang.length + " cabang");
    }

    public static void main(String[] args) {
        System.out.println("== suite awal: test nilai 85 dan 72 ==");
        System.out.println("hasil : " + kategoriNilai(85) + ", " + kategoriNilai(72));
        laporan();

        System.out.println("== suite ditambah test nilai 45 ==");
        System.out.println("hasil : " + kategoriNilai(45));
        laporan();
    }
}
