diff --git a/TestNiji.java b/TestNiji.java new file mode 100644 index 0000000..540dc89 --- /dev/null +++ b/TestNiji.java @@ -0,0 +1,106 @@ +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); + } +}