/* *************************************************************************************** * 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 TestInterchangeablePair extends TestCase { private InterchangeablePair<String, String> pair1a = new InterchangeablePair<String, String>("a", "b"); private InterchangeablePair<String, String> pair1b = new InterchangeablePair<String, String>("a", "c"); private InterchangeablePair<String, String> pair1c = new InterchangeablePair<String, String>("c", "b"); private InterchangeablePair<String, String> pair1d = new InterchangeablePair<String, String>("a", "b"); private InterchangeablePair<String, String> pair1e = new InterchangeablePair<String, String>("b", "a"); private InterchangeablePair<String, String> pair2a = new InterchangeablePair<String, String>("a", null); private InterchangeablePair<String, String> pair2b = new InterchangeablePair<String, String>("b", null); private InterchangeablePair<String, String> pair2c = new InterchangeablePair<String, String>("a", null); private InterchangeablePair<String, String> pair3a = new InterchangeablePair<String, String>(null, "b"); private InterchangeablePair<String, String> pair3b = new InterchangeablePair<String, String>(null, "c"); private InterchangeablePair<String, String> pair3c = new InterchangeablePair<String, String>(null, "b"); private InterchangeablePair<String, String> pair4a = new InterchangeablePair<String, String>(null, null); private InterchangeablePair<String, String> pair4b = new InterchangeablePair<String, String>(null, null); public void testEquals() { assertTrue(pair1a.equals(pair1d) && pair1d.equals(pair1a)); assertTrue(pair1a.equals(pair1e) && pair1e.equals(pair1a)); assertFalse(pair1a.equals(pair1b)); assertFalse(pair1a.equals(pair1c)); assertFalse(pair1a.equals(pair2a)); assertFalse(pair1a.equals(pair3a)); assertFalse(pair1a.equals(pair4a)); assertTrue(pair2a.equals(pair2c) && pair2c.equals(pair2a)); assertTrue(pair2b.equals(pair3a) && pair3a.equals(pair2b)); assertFalse(pair2a.equals(pair2b)); assertFalse(pair2a.equals(pair1a)); assertFalse(pair2b.equals(pair1e)); assertFalse(pair2b.equals(pair3b)); assertFalse(pair2a.equals(pair4a)); assertTrue(pair3a.equals(pair3c) && pair3c.equals(pair3a)); assertTrue(pair3c.equals(pair2b) && pair2b.equals(pair3c)); assertFalse(pair3a.equals(pair3b)); assertFalse(pair3b.equals(pair3a)); assertFalse(pair3a.equals(pair1a)); assertFalse(pair3a.equals(pair2a)); assertFalse(pair3a.equals(pair4a)); assertTrue(pair4a.equals(pair4b) && pair4b.equals(pair4a)); assertFalse(pair4a.equals(pair1b) || pair4a.equals(pair2a) || pair4a.equals(pair3a)); } public void testHashCode() { assertTrue(pair1a.hashCode() == ("a".hashCode() ^ "b".hashCode())); assertTrue(pair2a.hashCode() == "a".hashCode()); assertTrue(pair3a.hashCode() == "b".hashCode()); assertTrue(pair4a.hashCode() == 0); assertTrue(pair1a.hashCode() != pair2a.hashCode()); assertTrue(pair1a.hashCode() != pair3a.hashCode()); assertTrue(pair1a.hashCode() != pair4a.hashCode()); assertTrue(pair1a.hashCode() == pair1d.hashCode()); assertTrue(pair2a.hashCode() == pair2c.hashCode()); assertTrue(pair3a.hashCode() == pair3c.hashCode()); assertTrue(pair4a.hashCode() == pair4b.hashCode()); assertTrue(pair2b.hashCode() == pair3a.hashCode()); } public void testSetBehavior() { Set<InterchangeablePair<EventBean, EventBean>> eventPairs = new HashSet<InterchangeablePair<EventBean, EventBean>>(); EventBean[] events = new EventBean[4]; for (int i = 0; i < events.length; i++) { events[i] = SupportEventBeanFactory.createObject(new Integer(i)); } eventPairs.add(new InterchangeablePair<EventBean, EventBean>(events[0], events[1])); eventPairs.add(new InterchangeablePair<EventBean, EventBean>(events[0], events[2])); eventPairs.add(new InterchangeablePair<EventBean, EventBean>(events[1], events[2])); assertEquals(3, eventPairs.size()); eventPairs.add(new InterchangeablePair<EventBean, EventBean>(events[0], events[1])); eventPairs.add(new InterchangeablePair<EventBean, EventBean>(events[1], events[2])); eventPairs.add(new InterchangeablePair<EventBean, EventBean>(events[2], events[0])); eventPairs.add(new InterchangeablePair<EventBean, EventBean>(events[2], events[1])); eventPairs.add(new InterchangeablePair<EventBean, EventBean>(events[1], events[0])); assertEquals(3, eventPairs.size()); assertTrue(eventPairs.contains(new InterchangeablePair<EventBean, EventBean>(events[1], events[0]))); assertFalse(eventPairs.contains(new InterchangeablePair<EventBean, EventBean>(events[3], events[0]))); assertTrue(eventPairs.contains(new InterchangeablePair<EventBean, EventBean>(events[1], events[2]))); assertTrue(eventPairs.contains(new InterchangeablePair<EventBean, EventBean>(events[2], events[0]))); eventPairs.remove(new InterchangeablePair<EventBean, EventBean>(events[2], events[0])); assertFalse(eventPairs.contains(new InterchangeablePair<EventBean, EventBean>(events[2], events[0]))); eventPairs.remove(new InterchangeablePair<EventBean, EventBean>(events[1], events[2])); eventPairs.remove(new InterchangeablePair<EventBean, EventBean>(events[1], events[0])); assertTrue(eventPairs.isEmpty()); } }