Newer
Older
Nijishiki / TestNiji.java
import java.lang.reflect.Modifier;

public class TestNiji {
    public static void main(String[] args) {

        boolean allOk = true;

        Niji q1 = new Niji(1, -3, 2); // x^2 - 3x + 2
        allOk &= assertEquals(q1.getY(5.0), 12.0);
        double[] roots1 = q1.solve();
        allOk &= assertEquals(roots1.length, 2);
        allOk &= assertEquals(roots1[0], 2.0);
        allOk &= assertEquals(roots1[1], 1.0);

        Niji q2 = new Niji(-2, 18, 1); // -2x^2 +18x + 1
        allOk &= assertEquals(q2.getY(5.0), 41.0);
        double[] roots2 = q2.solve();
        allOk &= assertEquals(roots2.length, 2);
        allOk &= assertEquals(q2.getY(roots2[0]), 0);
        allOk &= assertEquals(q2.getY(roots2[1]), 0);

        Niji q3 = new Niji(1, 0, -4); // x^2 - 4
        allOk &= assertEquals(q3.getY(3.5), 8.25);
        double[] roots3 = q3.solve();
        allOk &= assertEquals(roots3.length, 2);
        allOk &= assertEquals(roots3[0], 2.0);
        allOk &= assertEquals(roots3[1], -2.0);

        Niji q4 = new Niji(0.5, 0, 0); // x^2 - 4
        allOk &= assertEquals(q4.numOfRoots(), 1);
        double[] roots4 = q4.solve();
        allOk &= assertEquals(roots4.length, 1);
        allOk &= assertEquals(roots4[0], 0.0);

        Niji q5 = new Niji(2, 3, 4);
        allOk &= assertEquals(q5.numOfRoots(), 0);

        try {
            new Niji(0, 1, 2);
        } catch (IllegalArgumentException e) {
            allOk &= assertEquals(e.getMessage(), "係数aは0にできません");
        }

        // public fields
        Class<?> clazz = Niji.class;
        java.lang.reflect.Field[] aField = clazz.getDeclaredFields();
        for (java.lang.reflect.Field field : aField) {
            int modifiers = field.getModifiers();
            allOk &= assertEquals(Modifier.isPrivate(modifiers), true);
            allOk &= assertEquals(field.toString(), "private double Niji." + field.getName());
        }

        if (allOk) {
            System.out.println("All tests passed.");
        } else {
            System.out.println("Some tests failed.");
        }
    }

    private static boolean assertEquals(double a1, double a2) {
        if (a1 == a2) {
            return true;
        } else if (Math.abs(a1 - a2) < 1e-6) { // 誤差を許容する
            return true;
        } else {
            System.out.println("NG " + a1 + " != " + a2);
            printCurrentLocation();
            return false;
        }
    }

    private static boolean assertEquals(boolean a1, boolean a2) {
        if (a1 == a2) {
            return true;
        } else {
            System.out.println("NG " + a1 + " != " + a2);
            printCurrentLocation();
            return false;
        }
    }

    private static boolean assertEquals(String s1, String s2) {
        if (s1.equals(s2)) {
            return true;
        } else {
            System.out.println("NG " + s1 + " != " + s2);
            printCurrentLocation();
            return false;
        }
    }

    public static void printCurrentLocation() {
        StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
        StackTraceElement element = stackTrace[3];
        String fileName = element.getFileName();
        int lineNumber = element.getLineNumber();
        String methodName = element.getMethodName();
        String className = element.getClassName();

        System.out.println("  アサーション失敗箇所");
        System.out.println("  > File: " + fileName);
        System.out.println("  > Line: " + lineNumber);
        System.out.println("  > Class: " + className);
        System.out.println("  > Method: " + methodName);
    }
}