package org.bulldog.core;

import junit.framework.TestCase;

import org.bulldog.core.Signal;
import org.junit.Test;


public class TestSignal {

	@Test
	public void testNumericValue() {
		TestCase.assertEquals(1, Signal.High.getNumericValue());
		TestCase.assertEquals(0, Signal.Low.getNumericValue());
		
		TestCase.assertEquals(Signal.Low, Signal.fromNumericValue(0));
		TestCase.assertEquals(Signal.High, Signal.fromNumericValue(1));
		Signal signal = Signal.fromNumericValue(1000);
		TestCase.assertEquals(Signal.High, signal);
		TestCase.assertEquals(1, signal.getNumericValue());
	}
	
	@Test
	public void testBooleanValue() {
		TestCase.assertTrue(Signal.High.getBooleanValue());
		TestCase.assertFalse(Signal.Low.getBooleanValue());
		
		TestCase.assertEquals(Signal.Low, Signal.fromBooleanValue(false));
		TestCase.assertEquals(Signal.High, Signal.fromBooleanValue(true));
	}
	
	@Test 
	public void testInverse() {
		TestCase.assertEquals(Signal.Low, Signal.High.inverse());
		TestCase.assertEquals(Signal.High, Signal.Low.inverse());
	}
	
	@Test
	public void testFromString() {
		try {
			Signal.fromString(null);
			TestCase.fail();
		} catch(IllegalArgumentException ex) {}
		
		try {
			Signal.fromString("highhh");
			TestCase.fail();
		} catch(IllegalArgumentException ex) {}
	
		try {
			Signal.fromString("asdasd");
			TestCase.fail();
		} catch(IllegalArgumentException ex) {}
		
		Signal signal = Signal.fromString("low");
		TestCase.assertEquals(Signal.Low, signal);
		
		signal = Signal.fromString("LOW");
		TestCase.assertEquals(Signal.Low, signal);
		
		signal = Signal.fromString("Low");
		TestCase.assertEquals(Signal.Low, signal);
		
		signal = Signal.fromString("lOw    ");
		TestCase.assertEquals(Signal.Low, signal);
		
		signal = Signal.fromString("high");
		TestCase.assertEquals(Signal.High, signal);
		
		signal = Signal.fromString("HIGH");
		TestCase.assertEquals(Signal.High, signal);
		
		signal = Signal.fromString("   HiGH ");
		TestCase.assertEquals(Signal.High, signal);
		
		signal = Signal.fromString("   1 ");
		TestCase.assertEquals(Signal.High, signal);
		
		signal = Signal.fromString("1");
		TestCase.assertEquals(Signal.High, signal);
		
		signal = Signal.fromString("0");
		TestCase.assertEquals(Signal.Low, signal);
		
		signal = Signal.fromString("  0000   ");
		TestCase.assertEquals(Signal.Low, signal);
		
		signal = Signal.fromString("  1.0   ");
		TestCase.assertEquals(Signal.High, signal);
	}
	
}