gitweb on Svarog

projekti pod git sistemom za održavanje verzija -- projects under the git version control system
Hash, doterivanje tekstualnog materijala
[spa2-materijali.git] / Hash / boje-i-automobili / TestHash.java
1 /**
2 * Test program za hash funkcije i equals funkciju
3 *
4 * Napravljen je da prikazuje rezultate ubacivanja istog fajla u tabele
5 * razlicitih velicina.
6 *
7 * Tip podataka koji se ubacuje se lako moze promeniti prosledjivanjem
8 * odgovarajuceg tipa i imena foldera u konstruktoru, ili promenama dve
9 * promenljive na pocetku klase.
10 *
11 * Medjutim da bi to radilo tipovi treba da prosiruju klasu InfoTip i da imaju
12 * ili prazan konstruktor ili da se nekako drugacije inicijalizuje objekat
13 * `element` u ovoj klasi.
14 *
15 * Glavni razlog za koriscenje InfoTipa kao dodatne klase je da imamo jednostavan
16 * nacin za ucitavanje pojedinacnih podataka datog tipa iz fajla.
17 *
18 * Takodje se ocekuje da postoje fajlovi tipa "t0" i "t1" za testiranje. Osnova
19 * imena fajla se moze proslediti u konstruktoru, ali ce program svakako traziti
20 * fajlove koji se zavrsavaju sa 0 i 1. To se moze promeniti u kodu ovog
21 * programa.
22 *
23 * @Version 1.1. 2017
24 */
25 public class TestHash {
27 // treba postaviti tip ovog objekta i folder u kome su adekvatni
28 // podaci da bi se radilo sa drugim podacima
29 // ovo se treba raditi preko konstruktora
30 private InfoTip element ;
31 private String folder ;
32 private String osnova;
34 /**
35 * Konstruktor treba pozvati sa jednom instancom elementa tipa koji
36 * se ubacuju u skup, te dati folder u kome su podaci (moze biti i
37 * trenutni "" ili "./") i osnovu imena fajla koji se ucitavaju, tj
38 * na osnovu ce se dodati "0.txt" i "1.txt" za osnovne i napredne testove.
39 */
40 public TestHash(InfoTip element, String folder, String osnova) {
41 this.element = element;
42 this.folder = folder;
43 this.osnova = osnova;
44 }
46 public TestHash(InfoTip element, String folder) {
47 this(element, folder, "/t");
48 }
50 /*
51 * Pravi praznu mapu i ispisuje je
52 */
53 public void emptyTest() {
54 StatSet<Object> hash = new StatSet<>();
55 hash.printStats();
56 }
58 /*
59 * ucitava podatke iz datog fajla u tabelu date velicine, pri cemu su podaci
60 * datog tipa, te ispisuje na kraju statistike o tabeli.
61 */
62 public void infoTest(String fajl, int size, InfoTip i) {
63 StatSet<InfoTip> hash = new StatSet<>();
64 System.out.println("poceto ucitavanje");
65 if (Svetovid.testIn(fajl)) {
66 while (Svetovid.in(fajl).hasMore()) {
67 InfoTip sledeci = i.ucitaj(Svetovid.in(fajl));
68 hash.add(sledeci);
69 }
70 Svetovid.closeIn(fajl);
72 hash.printStats();
73 } else {
74 System.err.println("ne moze se otvoriti fajl:" + fajl);
75 }
76 }
78 /*
79 * Testira ubacivanje i izbacivanje elemenata iz tabele, cime se dodatno
80 * proverava da li hash/equals rade kako treba
81 */
82 public void addRemoveTest(String fajl, int size, InfoTip i) {
83 StatSet<InfoTip> hash = new StatSet<>();
84 if (Svetovid.testIn(fajl)) {
85 while (Svetovid.in(fajl).hasMore()) {
86 hash.add(i.ucitaj(Svetovid.in(fajl)));
87 }
88 Svetovid.closeIn(fajl);
90 System.out
91 .println("-- dodatni testovi ubacivanja i izbacivanja --");
92 //hash.printStats();
93 InfoTip it = hash.someElement();
94 if (!hash.add(it)) {
95 System.out.println("uspeh: nije ponovo dodat");
96 } else {
97 System.out.println("neuspeh: ponovo dodat!");
98 }
99 if (hash.remove(it)) {
100 System.out.println("uspeh: uklonjen");
101 if (hash.add(it)) {
102 System.out.println("uspeh: vracen");
103 } else {
104 System.out.println("neuspeh: nije vracen");
106 } else {
107 System.out.println("neuspeh: nije uklonjen!");
110 System.out.println("ponovo ubacivanje svih:");
111 int br = 0;
112 while (Svetovid.in(fajl).hasMore()) {
113 if (hash.add(i.ucitaj(Svetovid.in(fajl))))
114 br++;
116 Svetovid.closeIn(fajl);
117 if (br == 0)
118 System.out.println("+ok, nijedan nije dodat");
119 else
120 System.out.println("!!ponovo dodato elemnata:" + br);
122 } else {
123 System.err.println("ne moze se otvoriti fajl!");
127 // i je neki koji bi trebao biti "prazan"
128 public void equalsTest(String fajl, InfoTip i) {
129 if (Svetovid.testIn(fajl)) {
131 InfoTip prvi = i.ucitaj(Svetovid.in(fajl));
132 InfoTip drugi = i.ucitaj(Svetovid.in(fajl));
134 Svetovid.closeIn(fajl);
136 InfoTip prviA = i.ucitaj(Svetovid.in(fajl));
138 Svetovid.closeIn(fajl);
139 System.out.println();
141 System.out
142 .println("-- dodatni testovi za equals --");
143 equalsHelper(prvi,drugi,false,"prva dva iz fajla");
144 equalsHelper(prvi,prvi,true,"dva bukvalno ista");
145 equalsHelper(prvi,prviA,true,"dva sa istim sadrzajem");
146 equalsHelper(prvi,null,false,"sa null");
147 equalsHelper(prvi,i,false,"sa 'praznim' datim u pokretanju");
148 equalsHelper(i,drugi,false,"'prazni' sa drugim");
150 } else {
151 System.err.println("ne moze se otvoriti fajl!");
155 private void equalsHelper(Object a, Object b, boolean ocekivano, String poruka) {
156 System.out.printf(">>%1$-40s",poruka);
157 try {
158 boolean res = a.equals(b);
159 System.out.println(" "+ ((ocekivano==res)?"+ok":"!!") + '(' + res + ')');
160 } catch (Exception ex) {
161 System.out.println("!! izuzetak");
162 ex.printStackTrace(System.out);
166 public void run() {
167 // emptyTest();
169 String fajl = osnova + "1.txt";
171 infoTest(folder + fajl, 997, element);
172 Svetovid.out.println();
174 // add remove radimo na manjem fajlu
175 addRemoveTest(folder + osnova + "0.txt", 101, element);
176 equalsTest(folder + osnova + "0.txt", element);
177 System.out.print("Hash na 'praznom':");
178 try {
179 System.out.println(element.hashCode());
180 } catch (Exception ex) {
181 System.out.println("!! izuzetak");
182 ex.printStackTrace(System.out);
184 System.out.println();
185 System.out.println("NAPOMENA: testovi ne mogu garantovi potpunu ispravnost funkcija.");
188 public static void main(String[] args) {
189 System.out.println("Ovaj program ne treba pokretati. Pogledati uputstva.");
190 System.out.println("Druge klase treba da instanciraju objekat ovog tipa"
191 + " i da pokrenu 'run' na njemu.");
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner