package com.github.liblevenshtein.collection; import it.unimi.dsi.fastutil.objects.Object2IntMap; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2IntRBTreeMap; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import static org.assertj.core.api.Assertions.assertThat; public class SymmetricImmutablePairTest { private static final String A = "a"; private static final String B = "b"; private static final String C = "c"; @DataProvider(name = "equivalentPairs") public Object[][] equivalentPairs() { return new Object[][] { {build(A, A), build(A, A)}, {build(A, B), build(B, A)}, {build(B, A), build(A, B)}, }; } @DataProvider(name = "inequivalentPairs") public Object[][] inequivalentPairs() { return new Object[][] { {build(A, B), build(A, C)}, }; } @Test(dataProvider = "equivalentPairs") public void testEquivalentPairs( final SymmetricImmutablePair<String> lhs, final SymmetricImmutablePair<String> rhs) { assertThat(lhs).isEqualByComparingTo(lhs); assertThat(rhs).isEqualByComparingTo(rhs); assertThat(lhs).isEqualByComparingTo(rhs); assertThat(rhs).isEqualByComparingTo(lhs); assertThat(lhs).isEqualTo(lhs); assertThat(rhs).isEqualTo(rhs); assertThat(lhs).isEqualTo(rhs); assertThat(rhs).isEqualTo(lhs); assertThat(lhs.hashCode()).isEqualTo(rhs.hashCode()); Object2IntMap<SymmetricImmutablePair<String>> map; map = new Object2IntOpenHashMap<>(2); map.put(lhs, 1); assertThat(map).containsEntry(lhs, 1); assertThat(map).containsEntry(rhs, 1); map.put(rhs, 2); assertThat(map).containsEntry(rhs, 2); assertThat(map).containsEntry(lhs, 2); map = new Object2IntRBTreeMap<>(); map.put(lhs, 1); assertThat(map).containsEntry(lhs, 1); assertThat(map).containsEntry(rhs, 1); map.put(rhs, 2); assertThat(map).containsEntry(rhs, 2); assertThat(map).containsEntry(lhs, 2); } @Test(dataProvider = "inequivalentPairs") public void testInequivalentPairs( final SymmetricImmutablePair<String> lhs, final SymmetricImmutablePair<String> rhs) { assertThat(lhs).isEqualByComparingTo(lhs); assertThat(rhs).isEqualByComparingTo(rhs); assertThat(lhs).isLessThan(rhs); assertThat(rhs).isGreaterThan(lhs); assertThat(lhs).isEqualTo(lhs); assertThat(rhs).isEqualTo(rhs); assertThat(lhs).isNotEqualTo(rhs); assertThat(rhs).isNotEqualTo(lhs); assertThat(lhs.hashCode()).isNotEqualTo(rhs.hashCode()); } public SymmetricImmutablePair<String> build( final String first, final String second) { return new SymmetricImmutablePair<>(first, second); } }