/*
* Copyright 2014 Goldman Sachs.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.gs.collections.impl.tuple;
import java.util.Map;
import com.gs.collections.api.block.function.Function;
import com.gs.collections.api.map.MutableMap;
import com.gs.collections.api.tuple.Pair;
import com.gs.collections.api.tuple.Twin;
import com.gs.collections.impl.map.mutable.UnifiedMap;
import com.gs.collections.impl.test.Verify;
import org.junit.Assert;
import org.junit.Test;
public class TuplesTest
{
@Test
public void pairFrom()
{
Pair<String, String> pair = Tuples.pair("1", "2");
Map.Entry<String, String> entry = pair.toEntry();
Pair<String, String> pair2 = Tuples.pairFrom(entry);
Assert.assertEquals(pair, pair2);
}
@Test
public void pair()
{
Pair<String, String> pair = Tuples.pair("1", "2");
Assert.assertEquals("1", pair.getOne());
Assert.assertEquals("2", pair.getTwo());
}
@Test
public void twin()
{
Twin<String> twin = Tuples.twin("1", "2");
Assert.assertEquals("1", twin.getOne());
Assert.assertEquals("2", twin.getTwo());
}
@Test
public void equalsHashCode()
{
Twin<String> pair1 = Tuples.twin("1", "1");
Pair<String, String> pair1a = Tuples.pair("1", "1");
Pair<String, String> pair2 = Tuples.pair("2", "2");
Verify.assertEqualsAndHashCode(pair1, pair1);
Verify.assertEqualsAndHashCode(pair1, pair1a);
Assert.assertNotEquals(pair1, pair2);
Assert.assertNotEquals(pair1, new Object());
}
@Test
public void putToMap()
{
Pair<String, Integer> pair = Tuples.pair("1", 2);
MutableMap<String, Integer> map = UnifiedMap.newMap();
pair.put(map);
Verify.assertContainsAllKeyValues(map, "1", 2);
Verify.assertSize(1, map);
}
@Test
public void testToString()
{
Pair<String, String> pair1 = Tuples.pair("1", "1");
Assert.assertEquals("1:1", pair1.toString());
}
@Test
public void pairFunctions()
{
Integer two = 2;
Pair<String, Integer> pair = Tuples.pair("One", two);
Assert.assertEquals("One", ((Function<Pair<String, ?>, String>) Pair::getOne).valueOf(pair));
Assert.assertSame(two, ((Function<Pair<?, Integer>, Integer>) Pair::getTwo).valueOf(pair));
}
@Test
public void swap()
{
Pair<String, Integer> pair = Tuples.pair("One", 1);
Pair<Integer, String> swappedPair = pair.swap();
Pair<Integer, String> expectedPair = Tuples.pair(1, "One");
Assert.assertEquals(Integer.valueOf(1), swappedPair.getOne());
Assert.assertEquals("One", swappedPair.getTwo());
Assert.assertEquals(expectedPair, swappedPair);
Twin<String> twin = Tuples.twin("One", "1");
Twin<String> swappedTwin = twin.swap();
Twin<String> expectedTwin = Tuples.twin("1", "One");
Assert.assertEquals("1", swappedTwin.getOne());
Assert.assertEquals("One", swappedTwin.getTwo());
Assert.assertEquals(expectedTwin, swappedTwin);
}
}