// TRAII_23_X2_testi.java SJ // Testiluokka TRAII 2023 tehtäviin X2 ja 5-7 import java.util.*; public class TRAII_23_X2_testi { static TRAII_23_X2 testattava = new TRAII_23_X2_simo(); // ^^^^ oma tunnus tähän public static void main(String[] args) { // komentoriviparametrina maksimikoko kuvaukselle int N = 1000000; if (args.length > 0) N = Integer.parseInt(args[0]); // satunnaislukusiemen int siemen = 42; if (args.length > 1) siemen = Integer.parseInt(args[1]); Random rnd = new Random(siemen); // tulostusten määrä int print = 3; if (args.length > 2) print = Integer.parseInt(args[2]); // kutsutaan ensin ilman tulostuksia 3 sekunnin ajan lammita(N, rnd, 3); // sitten varsinainen testiajo testaaX2(N, rnd, print); } // main() /** * Testaa tehtävää syötekoolla 1..n * @param n maksimi syötekoko * @param rnd satunnaislukugeneraattori * @param print tulostusten määrä */ static void testaaX2(int n, Random rnd, int print) { int k = 1; // Map M = new HashMap<>(); Map M = new TreeMap<>(); while (M.size() < n) { while (M.size() < k) M.put(rnd.nextDouble(), rnd.nextDouble()); testaaX2(M, print); k *= 10; } } /** * Kutsuu testausta ilman tulostuksia kunnes annettu aika on kuulunut. * @param n maksimi syötekoko * @param rnd satunnaislukugeneraattori * @param sek suorituksen kesto */ static void lammita(int n, Random rnd, int sek) { System.out.println("Lämmitys alkaa " + sek + "s"); long loppu = System.nanoTime() + sek*1000L*1000*1000; while (System.nanoTime() < loppu) testaaX2(n, rnd, 0); System.out.println("Lämmitys loppuu"); } /** * Testaa tehtävää X2 kuvauksella M * @param M kuvaus jota testataan * @param print tulostusten määrä */ static void testaaX2(Map M, int print) { if (print > 1) System.out.println("\nTesti, Map = " + M.getClass().toString() + " n = " + M.size()); long alku = System.nanoTime(); long tulos = testattava.containsKeyNopeus(M); long loppu = System.nanoTime(); if (print > 0) System.out.println(" tulos = " + tulos + " ns"); if (loppu-alku > 1000L*1000*1000) System.out.println("Varoitus: testi oli tarpeettoman hidas (yli 1s)"); if (print > 3) // säädä tästä jos haluat nähdä paljonko testisi kesti System.out.println("Testi kesti " + ((loppu-alku)/1000000.0) + " ms"); } }