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); } }