gitweb on Svarog

projekti pod git sistemom za održavanje verzija -- projects under the git version control system
Hash, boje i automobili, osvezavanje
[spa2-materijali.git] / Hash / boje-i-automobili / TestHash.java
index 5d19502..63da427 100644 (file)
@@ -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.");
        }
 }
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner