/*
 * InductorTest.java
 * JUnit based test
 *
 * Created on November 1, 2003, 12:35 PM
 */

import junit.framework.*;

/**
 *
 * @author Barry
 */
public class InductorTest extends TestCase {
    
    public InductorTest(java.lang.String testName) {
        super(testName);
    }
    
    public static Test suite() {
        TestSuite suite = new TestSuite(InductorTest.class);
        return suite;
    }
    
    /** Test 1 of 3 - computeInductance method, of class Inductor. */
    public void testInductanceZeroCrossing() {
        System.out.println("testInductanceZeroCrossing");
        Inductor ind = new Inductor( Inductor.ZERO_CROSSING );

        // verify 1 second and 1 farad
        // L == 1 / (pi^2) = 101 mh
        double expected_L = 0.10132;
        double computed_L = ind.computeInductance(1., 1.);
        assertTrue( "for 1sec @ 1F expected " + expected_L + " but got " + computed_L, (expected_L*0.98 < computed_L));
        assertTrue( "for 1sec @ 1F expected " + expected_L + " but got " + computed_L, (expected_L*1.02 > computed_L));
        
        // verify typical coilgun value
        expected_L = 0.0010132;
        computed_L = ind.computeInductance(10E-3, 10E-3);
        assertTrue( "for 10msec @ 10,000uF expected " + expected_L + " but got " + computed_L, (expected_L*0.98 < computed_L));
        assertTrue( "for 10msec @ 10,000uF expected " + expected_L + " but got " + computed_L, (expected_L*1.02 > computed_L));
    }
    
    /** Test 2 of 3 - computeInductance method, of class Inductor. */
    public void testInductanceFullCycle() {
        System.out.println("testInductanceFullCycle");
        Inductor ind = new Inductor( Inductor.FULL_CYCLE );

        // verify 1 second and 1 farad
        // L = 1 / (4 * pi^2) = 0.02533
        double expected_L = 0.02533;
        double computed_L = ind.computeInductance(1., 1.);
        assertTrue( "for 1sec @ 1F expected " + expected_L + " but got " + computed_L, (expected_L*0.98 < computed_L));
        assertTrue( "for 1sec @ 1F expected " + expected_L + " but got " + computed_L, (expected_L*1.02 > computed_L));
        
        // verify typical coilgun value
        expected_L = 2.5330295910584442860969865802432e-4;
        computed_L = ind.computeInductance(10E-3, 10E-3);
        assertTrue( "for 10msec @ 10,000uF expected " + expected_L + " but got " + computed_L, (expected_L*0.98 < computed_L));
        assertTrue( "for 10msec @ 10,000uF expected " + expected_L + " but got " + computed_L, (expected_L*1.02 > computed_L));
    }
    
    /** Test 3 of 3 - computeInductance method, of class Inductor. */
    public void testInductanceHalfPower() {
        System.out.println("testInductanceHalfPower");
        Inductor ind = new Inductor( Inductor.HALF_POWER );

        // verify 1 second and 1 farad
        // L == 4 / (pi^2) = 101 mh
        double expected_L = 4 * 0.10132;
        double computed_L = ind.computeInductance(1., 1.);
        assertTrue( "for 1sec @ 1F expected " + expected_L + " but got " + computed_L, (expected_L*0.98 < computed_L));
        assertTrue( "for 1sec @ 1F expected " + expected_L + " but got " + computed_L, (expected_L*1.02 > computed_L));
        
        // verify typical coilgun value
        expected_L = 4 * 0.0010132;
        computed_L = ind.computeInductance(10E-3, 10E-3);
        assertTrue( "for 10msec @ 10,000uF expected " + expected_L + " but got " + computed_L, (expected_L*0.98 < computed_L));
        assertTrue( "for 10msec @ 10,000uF expected " + expected_L + " but got " + computed_L, (expected_L*1.02 > computed_L));
    }
    
    /** Test of setInductorType method, of class Inductor. */
    public void testSetInductorType() {
        System.out.println("testSetInductorType");
        
        // Add your test code below by replacing the default call to fail.
        assertNotNull( new Inductor(Inductor.FULL_CYCLE) );
        assertNotNull( new Inductor(Inductor.HALF_POWER) );
        assertNotNull( new Inductor(Inductor.ZERO_CROSSING) );
    }
    
    // Add test methods here, they have to start with 'test' name.
    // for example:
    // public void testHello() {}
    
    
}

