package net.azib.ipscan.core.values;

import net.azib.ipscan.config.Labels;
import org.junit.Test;

import static org.junit.Assert.*;

/**
 * IntegerWithUnitTest
 *
 * @author Anton Keks
 */
public class IntegerWithUnitTest {
	
	@Test
	public void testIntValue() throws Exception {
		assertEquals(0, new IntegerWithUnit(0, "a").intValue());
		assertEquals(-1, new IntegerWithUnit(-1, "a").intValue());
		assertEquals(Integer.MAX_VALUE, new IntegerWithUnit(Integer.MAX_VALUE, "a").intValue());
	}
	
	@Test
	public void testToString() throws Exception {
		assertEquals("151" + Labels.getLabel("unit.ms"), new IntegerWithUnit(151, "ms").toString());
	}

	@Test
	public void testEquals() throws Exception {
		assertTrue(new IntegerWithUnit(666, null).equals(new IntegerWithUnit(666, null)));
		assertTrue(new IntegerWithUnit(42, "a").equals(new IntegerWithUnit(42, "b")));
		assertFalse(new IntegerWithUnit(0, null).equals(null));
		assertFalse(new IntegerWithUnit(42, "a").equals(new IntegerWithUnit(43, "a")));
	}
	
	@Test
	public void testHashCode() throws Exception {
		assertEquals(3, new IntegerWithUnit(3, null).hashCode());
		assertEquals(-31, new IntegerWithUnit(-31, null).hashCode());
	}
	
	@Test
	public void testCompareTo() throws Exception {
		assertTrue(Comparable.class.isAssignableFrom(IntegerWithUnit.class));
		assertEquals(0, new IntegerWithUnit(1, null).compareTo(new IntegerWithUnit(1, null)));
		assertEquals(1, new IntegerWithUnit(123456789, null).compareTo(new IntegerWithUnit(123456, null)));
		assertEquals(-1, new IntegerWithUnit(12, null).compareTo(new IntegerWithUnit(123456, null)));
		assertEquals(1, new IntegerWithUnit(12, null).compareTo(null));
		var instance = new IntegerWithUnit(211082, null);
		assertEquals(0, instance.compareTo(instance));
	}
}
