package main

import (
	"testing"
	"unicode/utf8"
)

func TestBalikKata(t *testing.T) {
	uji := []struct {
		masuk      string
		diharapkan string
	}{
		{"katak", "katak"},
		{"go", "og"},
		{"hijau", "uajih"},
		{"résumé", "émusér"},
	}
	for _, u := range uji {
		if got := BalikKata(u.masuk); got != u.diharapkan {
			t.Errorf("BalikKata(%q) = %q, diharapkan %q", u.masuk, got, u.diharapkan)
		}
	}
}

func FuzzBalikKata(f *testing.F) {
	f.Add("katak")
	f.Add("belajar go")
	f.Add("résumé")
	f.Fuzz(func(t *testing.T, s string) {
		hasil := BalikKata(s)
		if len([]rune(hasil)) != len([]rune(s)) {
			t.Fatalf("jumlah rune berubah: masuk %d, keluar %d", len([]rune(s)), len([]rune(hasil)))
		}
		if utf8.ValidString(s) && BalikKata(hasil) != s {
			t.Errorf("BalikKata dua kali harus mengembalikan input asli, input %q menghasilkan %q", s, BalikKata(hasil))
		}
	})
}
