Tehtävänanto

Tutustu ensin oppimateriaalin lukuun Rästitehtävä 2: Alkulukuja ja testausta. Tässä tehtävässä on kaksi osaa:

A) Korjataan DoubleHash-luokan metodi next_prime()

DoubleHash-luokassa on metodi nimeltään next_prime(self, old), joka saatuaan kokonaisluvun laskee uuden kokonaisluvun joka on:
  1. Vähintään kaksi kertaa annettua lukua suurempi
  2. Alkuluku
rehash()-metodi käyttää tätä metodia laskiessaan koon uudelle, suuremmalle taulukolle.Taulukon koon tulee olla alkuluku, jotta hajautus toimisi virheettä.

Vinkki : alkulukua muulla kuin ykkösellä jaettaessa jakojäännös (%) ei saa olla 0.

B) Testataan kattavasti kaikki DoubleHash-luokan koodi

Testimoduulin runkoon on jo toteutettu kaksi testiä malliksi. Ensimmäinen testaa meneekö yksittäinen rakenteeseen laitettava alkio oikelle paikalle. Toinen testi testaa next_prime-metodia. Tarkoitus on lisätä joukko testejä, jotka testaavat kaikki koodin rivit ja suorittavat if/for/while jne. lauseiden molemmat haarat. ts. jokaisen if-lauseen tulisi olla testatessa ainakin kerran tosi ja ainakin kerran epätosi.

Heti kun olet luonut itsellesi Eclipseen projektin, voit ajaa nämä testit. "Yksittäisen lisäyksen testin" pitäisi mennä läpi(ei tulosta mitään) ja "next_prime:n testin" epäonnistua. Voit nyt toteuttaa next_prime:n ja kokeilla meneekö testi sitten läpi.

Valmiiksi annettu koodi

Lataa nämä kaikki työhakemistoosi.

  1. test.py (Palautetaan)
    Hajautusrakenteen testiluokka, jossa on valmiina yksi toteutettu testi. Jos ajat testin tehtäväpohjalle huomaat että testi ei mene läpi. Toteuta tähän luokkaan puuttuvat testit (vähintään kaksi omaa) joilla testataan annettua hajautusrakenteen toteutusta.
  2. double_hash.py (Palautetaan)
    Hajautusrakenteen toteutus. Yhtä metodia (next_prime) lukuunottamatta luokan koodiin ei tule koskea. Lue ohjeen lopussa oleva vinkki.
  3. hashable_string.py (Ei palauteta)
    Luokka joka kuvaa hajautustauluun tallennettavaa dataa. Yksinkertaisuuden vuoksi avainlukua ei lasketa hajautustaulun sisältämästä datasta, vaan sen voi suoraan antaa parametrina.

Huom!

Sinun täytyy mm. aiheuttaa tilanne jossa tehdään rehash.

Palauta tehtävän tiedostot double_hash.py, jonka next_prime-metodin toteutus on korjattu sekä testitiedosto test.py.