/**
 * CS-20  Asg6
 * MyAsnTest.java
 * Purpose: Tests the MyGradebook class
 *
 * @author Ed Parrish
 * @version 1.0 10/04/03
 */
public class MyAsnTest {
    /**
     * The main program for the ComplexTest class
     *
     * @param args -- not used
     */
    public static void main(String args[]) {
        testMyAsn();
        testCalcPercentage();
        testToLetterGrade();
        System.out.println("*** All tests passed ***");
    }

    /**
     * Convenience method to test for assertions.
     *
     * @param condition The test condition that must be true to pass.
     * @param message The reason for the failure.
     */
    public static void assertTrue(boolean condition, String message) {
        if (!condition) {
            throw new RuntimeException(message);
        }
    }

    /**
     * Test method: public MyAsn() and accessor methods
     */
    public static void testMyAsn() {
        System.out.println("Testing MyAsn()");
        MyAsn a = new MyAsn();
        assertTrue(a instanceof MyScores,
            "MyAsn is not a subclass of MyScores");
        a.setName("Assignments");
        assertTrue(a.getName().equals("Assignments"),
            "Name not assigned");
        a.setWeight(MyGradebook.ASN_WEIGHT);
        assertTrue(a.getWeight() == MyGradebook.ASN_WEIGHT,
            "Weight not assigned");
        a.setData(MyGradebook.ASN_DATA);
        assertTrue(a.getData() == MyGradebook.ASN_DATA,
            "Data not assigned");
    }

    /**
     * Test method: public double calcPercentage()
     */
    public static void testCalcPercentage() {
        System.out.println("Testing calcPercentage()");
        MyAsn a = new MyAsn();
        a.setName("Assignments");
        a.setWeight(MyGradebook.ASN_WEIGHT);
        a.setData(MyGradebook.ASN_DATA);
        double percentage = a.calcPercentage();
        assertTrue(percentage <= 1.0,
            "Percentage exceeds 100%: " + percentage);
        assertTrue((1.0 - percentage) < 0.000001,
            "Percentage calculated incorrectly: " + percentage);
    }

    /**
     * Test method: public static char toLetterGrade()
     */
    public static void testToLetterGrade() {
        System.out.println("Testing toLetterGrade()");
        for (int i = 100; i >= 90; i--) {
            char letterGrade = MyAsn.toLetterGrade(i / 100.0);
            assertTrue(letterGrade == 'A',
                "Wrong letter grade for " + i + "%: " + letterGrade);
        }
        for (int i = 89; i >= 80; i--) {
            char letterGrade = MyAsn.toLetterGrade(i / 100.0);
            assertTrue(letterGrade == 'B',
                "Wrong letter grade for " + i + "%: " + letterGrade);
        }
        for (int i = 79; i >= 70; i--) {
            char letterGrade = MyAsn.toLetterGrade(i / 100.0);
            assertTrue(letterGrade == 'C',
                "Wrong letter grade for " + i + "%: " + letterGrade);
        }
        for (int i = 69; i >= 60; i--) {
            char letterGrade = MyAsn.toLetterGrade(i / 100.0);
            assertTrue(letterGrade == 'D',
                "Wrong letter grade for " + i + "%: " + letterGrade);
        }
        for (int i = 59; i >= 0; i--) {
            char letterGrade = MyAsn.toLetterGrade(i / 100.0);
            assertTrue(letterGrade == 'F',
                "Wrong letter grade for " + i + "%: " + letterGrade);
        }
    }
}

