X-Git-Url: http://svarog.pmf.uns.ac.rs/gitweb/?p=spa2-materijali.git;a=blobdiff_plain;f=Hash%2Fboje-i-automobili%2FTestHash.java;h=63da42768392346f58f617b67ee2b0bf6902b8c7;hp=5d19502e4c88f408960ebf45601baba6344f7ab6;hb=50f88c8fe169a1f31868936d0c5cfd1d328a10a2;hpb=63020874209721047127cd4139bf4b7348eea5de diff --git a/Hash/boje-i-automobili/TestHash.java b/Hash/boje-i-automobili/TestHash.java index 5d19502..63da427 100644 --- a/Hash/boje-i-automobili/TestHash.java +++ b/Hash/boje-i-automobili/TestHash.java @@ -1,35 +1,42 @@ /** * Test program za hash funkcije i equals funkciju - * + * * Napravljen je da prikazuje rezultate ubacivanja istog fajla u tabele * razlicitih velicina. - * - * Takodje se lako moze promeniti tip podataka koji se ubacuje prosledjivanjem + * + * Tip podataka koji se ubacuje se lako moze promeniti prosledjivanjem * odgovarajuceg tipa i imena foldera u konstruktoru, ili promenama dve * promenljive na pocetku klase. - * + * * Medjutim da bi to radilo tipovi treba da prosiruju klasu InfoTip i da imaju * ili prazan konstruktor ili da se nekako drugacije inicijalizuje objekat * `element` u ovoj klasi. - * - * Takodje se ocekuje da postoje fajlovi tipa "t0" i "t2" za testiranje. Osnova + * + * Glavni razlog za koriscenje InfoTipa kao dodatne klase je da imamo jednostavan + * nacin za ucitavanje pojedinacnih podataka datog tipa iz fajla. + * + * Takodje se ocekuje da postoje fajlovi tipa "t0" i "t1" za testiranje. Osnova * imena fajla se moze proslediti u konstruktoru, ali ce program svakako traziti - * fajlove koji se zavrsavaju sa 0 i 2. To se moze promeniti u kodu ovog + * fajlove koji se zavrsavaju sa 0 i 1. To se moze promeniti u kodu ovog * programa. + * + * @Version 1.1. 2017 */ public class TestHash { - // treba promeniti tip ovog objekta i folder u kome su adekvatni + // treba postaviti tip ovog objekta i folder u kome su adekvatni // podaci da bi se radilo sa drugim podacima - // ovo se moze uraditi u konstruktoru - private InfoTip element = new Boja(); - private String folder = "boja"; - private String osnova = "/t"; - - public TestHash() { - - } + // ovo se treba raditi preko konstruktora + private InfoTip element ; + private String folder ; + private String osnova; + /** + * Konstruktor treba pozvati sa jednom instancom elementa tipa koji + * se ubacuju u skup, te dati folder u kome su podaci (moze biti i + * trenutni "" ili "./") i osnovu imena fajla koji se ucitavaju, tj + * na osnovu ce se dodati "0.txt" i "1.txt" za osnovne i napredne testove. + */ public TestHash(InfoTip element, String folder, String osnova) { this.element = element; this.folder = folder; @@ -82,7 +89,7 @@ public class TestHash { System.out .println("-- dodatni testovi ubacivanja i izbacivanja --"); - // hash.printStats(); + //hash.printStats(); InfoTip it = hash.someElement(); if (!hash.add(it)) { System.out.println("uspeh: nije ponovo dodat"); @@ -99,25 +106,88 @@ public class TestHash { } else { System.out.println("neuspeh: nije uklonjen!"); } + + System.out.println("ponovo ubacivanje svih:"); + int br = 0; + while (Svetovid.in(fajl).hasMore()) { + if (hash.add(i.ucitaj(Svetovid.in(fajl)))) + br++; + } + Svetovid.closeIn(fajl); + if (br == 0) + System.out.println("+ok, nijedan nije dodat"); + else + System.out.println("!!ponovo dodato elemnata:" + br); + + } else { + System.err.println("ne moze se otvoriti fajl!"); + } + } + + // i je neki koji bi trebao biti "prazan" + public void equalsTest(String fajl, InfoTip i) { + if (Svetovid.testIn(fajl)) { + + InfoTip prvi = i.ucitaj(Svetovid.in(fajl)); + InfoTip drugi = i.ucitaj(Svetovid.in(fajl)); + + Svetovid.closeIn(fajl); + + InfoTip prviA = i.ucitaj(Svetovid.in(fajl)); + + Svetovid.closeIn(fajl); + System.out.println(); + + System.out + .println("-- dodatni testovi za equals --"); + equalsHelper(prvi,drugi,false,"prva dva iz fajla"); + equalsHelper(prvi,prvi,true,"dva bukvalno ista"); + equalsHelper(prvi,prviA,true,"dva sa istim sadrzajem"); + equalsHelper(prvi,null,false,"sa null"); + equalsHelper(prvi,i,false,"sa 'praznim' datim u pokretanju"); + equalsHelper(i,drugi,false,"'prazni' sa drugim"); + } else { System.err.println("ne moze se otvoriti fajl!"); } } + private void equalsHelper(Object a, Object b, boolean ocekivano, String poruka) { + System.out.printf(">>%1$-40s",poruka); + try { + boolean res = a.equals(b); + System.out.println(" "+ ((ocekivano==res)?"+ok":"!!") + '(' + res + ')'); + } catch (Exception ex) { + System.out.println("!! izuzetak"); + ex.printStackTrace(System.out); + } + } + public void run() { // emptyTest(); - - String fajl = osnova + "2.txt"; + + String fajl = osnova + "1.txt"; infoTest(folder + fajl, 997, element); Svetovid.out.println(); // add remove radimo na manjem fajlu addRemoveTest(folder + osnova + "0.txt", 101, element); - + equalsTest(folder + osnova + "0.txt", element); + System.out.print("Hash na 'praznom':"); + try { + System.out.println(element.hashCode()); + } catch (Exception ex) { + System.out.println("!! izuzetak"); + ex.printStackTrace(System.out); + } + System.out.println(); + System.out.println("NAPOMENA: testovi ne mogu garantovi potpunu ispravnost funkcija."); } public static void main(String[] args) { - new TestHash().run(); + System.out.println("Ovaj program ne treba pokretati. Pogledati uputstva."); + System.out.println("Druge klase treba da instanciraju objekat ovog tipa" + + " i da pokrenu 'run' na njemu."); } }