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:
- Vähintään kaksi kertaa annettua lukua suurempi
- 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.
- 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.
- double_hash.py (Palautetaan)
Hajautusrakenteen toteutus. Yhtä metodia (next_prime) lukuunottamatta luokan koodiin ei tule koskea. Lue ohjeen
lopussa oleva vinkki.
- 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.