/* *************************************************************************************** * Copyright (C) 2006 EsperTech, Inc. All rights reserved. * * http://www.espertech.com/esper * * http://www.espertech.com * * ---------------------------------------------------------------------------------- * * The software in this package is published under the terms of the GPL license * * a copy of which has been included with this distribution in the license.txt file. * *************************************************************************************** */ package com.espertech.esper.collection; import com.espertech.esper.client.EventBean; import com.espertech.esper.supportunit.event.SupportEventBeanFactory; import junit.framework.TestCase; import java.util.HashSet; import java.util.Set; public class TestMultiKey extends TestCase { MultiKey<String> keys1 = new MultiKey<String>(new String[]{"a", "b"}); MultiKey<String> keys2 = new MultiKey<String>(new String[]{"a", "b"}); MultiKey<String> keys3 = new MultiKey<String>(new String[]{"a", null}); MultiKey<String> keys4 = new MultiKey<String>(new String[]{null, "b"}); MultiKey<String> keys5 = new MultiKey<String>(new String[]{null, null}); MultiKey<String> keys6 = new MultiKey<String>(new String[]{"a"}); MultiKey<String> keys7 = new MultiKey<String>(new String[]{"a", "b", "c"}); MultiKey<String> keys8 = new MultiKey<String>(new String[]{"a", "b", null}); MultiKey<String> keys9 = new MultiKey<String>(new String[]{"a", "b", "c", "d"}); MultiKey<String> keys10 = new MultiKey<String>(new String[]{"a", "b", "c", "d"}); MultiKey<String> keys11 = new MultiKey<String>(new String[]{"espera", "esperb"}); MultiKey<String> keys12 = new MultiKey<String>(new String[]{"esperc", "esperd"}); MultiKey<String> keys13 = new MultiKey<String>(new String[]{"espere", "esperf"}); public void testHashCode() { assertTrue(keys11.hashCode() != keys12.hashCode()); assertTrue(keys12.hashCode() != keys13.hashCode()); assertTrue(keys1.hashCode() == ("a".hashCode() * 31 ^ "b".hashCode())); assertTrue(keys3.hashCode() == "a".hashCode()); assertTrue(keys4.hashCode() == "b".hashCode()); assertTrue(keys5.hashCode() == 0); assertTrue(keys8.hashCode() == keys1.hashCode()); assertTrue(keys1.hashCode() == keys2.hashCode()); assertTrue(keys1.hashCode() != keys3.hashCode()); assertTrue(keys1.hashCode() != keys4.hashCode()); assertTrue(keys1.hashCode() != keys5.hashCode()); assertTrue(keys7.hashCode() != keys8.hashCode()); assertTrue(keys9.hashCode() == keys10.hashCode()); } public void testEquals() { assertEquals(keys2, keys1); assertEquals(keys1, keys2); assertFalse(keys1.equals(keys3)); assertFalse(keys3.equals(keys1)); assertFalse(keys1.equals(keys4)); assertFalse(keys2.equals(keys5)); assertFalse(keys3.equals(keys4)); assertFalse(keys4.equals(keys5)); assertTrue(keys1.equals(keys1)); assertTrue(keys2.equals(keys2)); assertTrue(keys3.equals(keys3)); assertTrue(keys4.equals(keys4)); assertTrue(keys5.equals(keys5)); assertFalse(keys1.equals(keys7)); assertFalse(keys1.equals(keys8)); assertFalse(keys1.equals(keys9)); assertFalse(keys1.equals(keys10)); assertTrue(keys9.equals(keys10)); } public void testGet() { assertEquals(1, keys6.size()); assertEquals(2, keys1.size()); assertEquals(3, keys8.size()); assertEquals(4, keys9.size()); assertEquals("a", keys1.get(0)); assertEquals("b", keys1.get(1)); assertTrue(null == keys4.get(0)); assertTrue("d" == keys10.get(3)); } public void testWithSet() { EventBean[][] testEvents = new EventBean[][]{ SupportEventBeanFactory.makeEvents(new String[]{"a", "b"}), SupportEventBeanFactory.makeEvents(new String[]{"a"}), SupportEventBeanFactory.makeEvents(new String[]{"a", "b", "c"}), SupportEventBeanFactory.makeEvents(new String[]{"a", "b"}), }; Set<MultiKey> mapSet = new HashSet<MultiKey>(); // Test contains mapSet.add(new MultiKey<EventBean>(testEvents[0])); assertTrue(mapSet.contains(new MultiKey<EventBean>(testEvents[0]))); assertFalse(mapSet.contains(new MultiKey<EventBean>(testEvents[1]))); assertFalse(mapSet.contains(new MultiKey<EventBean>(testEvents[2]))); assertFalse(mapSet.contains(new MultiKey<EventBean>(testEvents[3]))); // Test unique mapSet.add(new MultiKey<EventBean>(testEvents[0])); assertEquals(1, mapSet.size()); mapSet.add(new MultiKey<EventBean>(testEvents[1])); mapSet.add(new MultiKey<EventBean>(testEvents[2])); mapSet.add(new MultiKey<EventBean>(testEvents[3])); assertEquals(4, mapSet.size()); mapSet.remove(new MultiKey<EventBean>(testEvents[0])); assertEquals(3, mapSet.size()); assertFalse(mapSet.contains(new MultiKey<EventBean>(testEvents[0]))); mapSet.remove(new MultiKey<EventBean>(testEvents[1])); mapSet.remove(new MultiKey<EventBean>(testEvents[2])); mapSet.remove(new MultiKey<EventBean>(testEvents[3])); assertEquals(0, mapSet.size()); } }