From d5acd709e188364f015090fd7dc62d4db8025cc1 Mon Sep 17 00:00:00 2001 From: Muhammed Almas Date: Mon, 16 Jan 2017 02:15:46 +0530 Subject: [PATCH] BAEL-587 Guide to Bimap (#995) * BAL-36 File size api in java and apache commons IO * BAEL-282 grep in java - fixes after code review * BAEL-519 Added support for disruptor library * BAEL-519 Added support for disruptor library * BAEL-519 Added support for disruptor library * BAEL-519 Added support for disruptor library * BAEL-519 Added support for disruptor library * BAEL-519 Added support for disruptor library * BAEL-519 Added support for disruptor * BAEL-519 Moved all supporting classes to main source * BAEL-519 Moved all supporting classes to main source * BAEL-519 Moved asserts and test classes in test folder. * BAEL-519 moved test related producer and consumer to src. * BAEL-587 Initial commit for BiMap support. * BAEL-587 Added new tests * BAEL-587 Added new tests. * BAEL-519 Removed Disruptor link from readme file. * BAEL-587 Reverted Disruptor changes * BAEL-587 reverted changes --- core-java/pom.xml | 2 +- .../com/baeldung/guava/GuavaBiMapTest.java | 122 ++++++++++++++++++ 2 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 core-java/src/test/java/com/baeldung/guava/GuavaBiMapTest.java diff --git a/core-java/pom.xml b/core-java/pom.xml index 5766224b3a..3406bddda9 100644 --- a/core-java/pom.xml +++ b/core-java/pom.xml @@ -358,7 +358,7 @@ 1.1.7 - 19.0 + 21.0 3.5 1.55 1.10 diff --git a/core-java/src/test/java/com/baeldung/guava/GuavaBiMapTest.java b/core-java/src/test/java/com/baeldung/guava/GuavaBiMapTest.java new file mode 100644 index 0000000000..c04cfb14fb --- /dev/null +++ b/core-java/src/test/java/com/baeldung/guava/GuavaBiMapTest.java @@ -0,0 +1,122 @@ +package com.baeldung.guava; + +import static org.junit.Assert.*; + +import java.util.HashMap; +import java.util.Map; + +import org.junit.Test; +import com.google.common.collect.BiMap; +import com.google.common.collect.EnumHashBiMap; +import com.google.common.collect.HashBiMap; +import com.google.common.collect.ImmutableBiMap; + +public class GuavaBiMapTest { + @Test + public void whenQueryByValue_shouldReturnKey() { + final BiMap personCountryHeadBiMap = HashBiMap.create(); + personCountryHeadBiMap.put("Modi", "India"); + personCountryHeadBiMap.put("Obama", "USA"); + personCountryHeadBiMap.put("Putin", "USSR"); + + final String countryHeadName = personCountryHeadBiMap.inverse().get("India"); + + assertEquals("Modi", countryHeadName); + } + + @Test + public void whenCreateBiMapFromExistingMap_shouldReturnKey() { + final Map personCountryHeadMap = new HashMap<>(); + personCountryHeadMap.put("Modi", "India"); + personCountryHeadMap.put("Obama", "USA"); + personCountryHeadMap.put("Putin", "USSR"); + final BiMap personCountryHeadBiMap = HashBiMap.create(personCountryHeadMap); + + final String countryHeadName = personCountryHeadBiMap.inverse().get("India"); + + assertEquals("Modi", countryHeadName); + } + + @Test + public void whenQueryByKey_shouldReturnValue() { + final BiMap personCountryHeadBiMap = HashBiMap.create(); + + personCountryHeadBiMap.put("Modi", "India"); + personCountryHeadBiMap.put("Obama", "USA"); + personCountryHeadBiMap.put("Putin", "USSR"); + + assertEquals("USA", personCountryHeadBiMap.get("Obama")); + } + + @Test(expected = IllegalArgumentException.class) + public void whenSameValueIsBeingPresent_shouldThrowException() { + final BiMap personCountryHeadBiMap = HashBiMap.create(); + + personCountryHeadBiMap.put("Modi", "India"); + personCountryHeadBiMap.put("Obama", "USA"); + personCountryHeadBiMap.put("Putin", "USSR"); + personCountryHeadBiMap.put("Trump", "USA"); + } + + @Test + public void givenSameValueIsBeingPresent_whenForcePutIsUsed_shouldCompleteSuccessfully() { + final BiMap personCountryHeadBiMap = HashBiMap.create(); + + personCountryHeadBiMap.put("Modi", "India"); + personCountryHeadBiMap.put("Obama", "USA"); + personCountryHeadBiMap.put("Putin", "USSR"); + personCountryHeadBiMap.forcePut("Trump", "USA"); + + assertEquals("USA", personCountryHeadBiMap.get("Trump")); + assertEquals("Trump", personCountryHeadBiMap.inverse().get("USA")); + } + + @Test + public void whenSameKeyIsBeingPresent_shouldReplaceAlreadyPresent() { + final BiMap personCountryHeadBiMap = HashBiMap.create(); + + personCountryHeadBiMap.put("Modi", "India"); + personCountryHeadBiMap.put("Obama", "USA"); + personCountryHeadBiMap.put("Putin", "USSR"); + personCountryHeadBiMap.put("Obama", "HongKong"); + + assertEquals("HongKong", personCountryHeadBiMap.get("Obama")); + } + + @Test + public void whenUsingImmutableBiMap_shouldAllowPutSuccessfully() { + final BiMap personCountryHeadBiMap = new ImmutableBiMap.Builder().put("Modi", "India").put("Obama", "USA").put("Putin", "USSR").build(); + + assertEquals("USA", personCountryHeadBiMap.get("Obama")); + } + + @Test(expected = UnsupportedOperationException.class) + public void whenUsingImmutableBiMap_shouldNotAllowRemove() { + final BiMap personCountryHeadBiMap = new ImmutableBiMap.Builder().put("Modi", "India").put("Obama", "USA").put("Putin", "USSR").build(); + + personCountryHeadBiMap.remove("Modi"); + } + + @Test(expected = UnsupportedOperationException.class) + public void whenUsingImmutableBiMap_shouldNotAllowPut() { + final BiMap personCountryHeadBiMap = new ImmutableBiMap.Builder().put("Modi", "India").put("Obama", "USA").put("Putin", "USSR").build(); + + personCountryHeadBiMap.put("Trump", "USA"); + } + + private enum Operation { + ADD, SUBTRACT, MULTIPLY, DIVIDE + } + + @Test + public void whenUsingEnumAsKeyInMap_shouldReplaceAlreadyPresent() { + final BiMap operationStringBiMap = EnumHashBiMap.create(Operation.class); + + operationStringBiMap.put(Operation.ADD, "Add"); + operationStringBiMap.put(Operation.SUBTRACT, "Subtract"); + operationStringBiMap.put(Operation.MULTIPLY, "Multiply"); + operationStringBiMap.put(Operation.DIVIDE, "Divide"); + + assertEquals("Divide", operationStringBiMap.get(Operation.DIVIDE)); + } +}