変態Comparatorを書いてユニットテストをしてみた

変態アドベントカレンダーが止まってしまいそうなので支援します。

最近、勤務先の会社で、アルバイト希望の学生に試験を出したりしているのですが、Comparatorが書ける子いないので、(ある意味)模範例のつもりで颯爽と書いてみたいと思います。(いえーい!みんな見てるー?w)

どんなときでも"hentai"または"HENTAI"が先頭に来るコンパレーターです。

import java.util.Comparator;
public class HentaiComparator implements Comparator<String> {
    public int compare(String o1, String o2) {
        if ("hentai".equalsIgnoreCase(o1)) {
            if ("hentai".equalsIgnoreCase(o2)) {
                return o1.compareTo(o2);
            }
            return -1;
        } else if ("hentai".equalsIgnoreCase(o2)) {
            return 1;
        }
        if (o1 == null) {
            if (o2 == null) {
                return 0;
            }
            return 1;
        }
        if (o2 == null) {
            return -1;
        }
        return o1.compareTo(o2);
    };
}

ついでにユニットテストも書いてみましょう。


import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; import java.util.Iterator; import java.util.TreeSet; import org.junit.Test; public class HentaiCompareTest { @Test public void 並び順テスト() { TreeSet<String> hentaiSet = new TreeSet<String>(new HentaiComparator()); hentaiSet.add("susumuis"); hentaiSet.add("hoge"); hentaiSet.add("HENTAI"); hentaiSet.add("fuga"); hentaiSet.add(null); hentaiSet.add("hentai"); Iterator<String> iter = hentaiSet.iterator(); assertThat(iter.hasNext(), is(true)); assertThat(iter.next(), is("HENTAI")); assertThat(iter.hasNext(), is(true)); assertThat(iter.next(), is("hentai")); assertThat(iter.hasNext(), is(true)); assertThat(iter.next(), is("fuga")); assertThat(iter.hasNext(), is(true)); assertThat(iter.next(), is("hoge")); assertThat(iter.hasNext(), is(true)); assertThat(iter.next(), is("susumuis")); assertThat(iter.hasNext(), is(true)); assertThat(iter.next(), nullValue()); assertThat(iter.hasNext(), is(false)); } }

注意:このコードを参考にして弊社の試験を落ちても何の保証もできません。

コメントを残す