Viikko 7 - Testaus ja varmentaminen, osa II

Johdanto

Esimerkkivastaukset

Koska edellisellä viikolla hommat jäivät pahasti kesken, jatketaan tällä viikolla lisäohjeistuksen ja parin lisätehtävän kanssa Tämä kappale perustuu Real World Haskellin lukuun 11.

Tehtävänanto

Toteuta kätevä ja turvallinen kirjasto tälläisen tutkimusaineiston käyttöön. Kirjaston tulee pystyä käsittelemään suorakaiteita ja niihin liittyviä biomassa- ja lannoitearvoja. Koska lannoite- ja mittausalat voivat olla osittain päällekkäin, niin kirjasto tarvitsee ehdottomasti funktiot, joilla voidaan laskea, leikkaavatko nämä alat, millainen suorakaide leikkaus on, mikä on suorakaiteiden tai niiden yhdisteen pinta-ala sekä määritellä pienin mahdollinen suorakaide, joka kattaa koko mittausjoukon.

Tyypit

Määrittele seuraavat tyypit

  1. 2D - piste.
  2. Suorakaide.
  3. Alue, joka on ei leikkaavien suorakaiteiden joukko.
  4. Tyyppi, joka yhdistää mittaustiedon alueeseen.
  5. Tyyppejä erilaisille mittausarvoille.

Operaattorit

Määrittele seuraavat operaattorit em. tyypeille.

  1. Pinta-ala niille tyypeille joilla sellainen on
  2. Yhdiste
  3. Leikkaus
  4. Erotus
  5. Pienin peittävä suorakaide
  6. Funktiot, jotka käsittelevät mittaustietoa

Luokat

Listaa ja perustele, mitkä tyyppisi ovat, tai eivät ole,

  1. tyyppiluokkaa Eq
  2. tyyppiluokkaa Ord
  3. tyyppiluokkaa Show
  4. tyyppiluokkaa Monoid
  5. tyyppiluokkaa Functor
  6. tyyppiluokkaa Category
  7. tyyppiluokkaa Applicative
  8. tyyppiluokkaa Monad
  9. Keksitkö muita hyödyllisiä tyyppiluokkia?

Toteutus

  1. Toteuta yo. määritelmät. Huomaa, että demokerta on ehkä mielekkäämpi, jos teet toteutukset hieman huolimattomasti ja testaamatta. Voit myös tehdä toteutukset samaan aikaan seuraavan tehdävän kanssa.

Lainalaisuudet

Kirjoita seuraavat lainalaisuudet formaalisti QuickCheck-määreinä:

  1. a ∩ b = b ∩ a
  2. ala (a ∪ b) = ala (b ∪ a)
  3. yhdiste a b `pois yhdiste b a == tyhjä
  4. a ∩ a == a
  5. a ∪ a == a
  6. a ∩ (a ∩ b) = a ∩ b
  7. a ∩ tyhja = tyhja
  8. ala a > 0
  9. (a ∪ b) ∪ c = a ∪ (b ∪ c)
  10. a ∪ (b ∩ c) = (a ∪ b) ∩ (a ∪ c)
  11. a ∩ (b ∪ c) = (a ∩ b) ∪ (a ∩ c)
  12. pieninpeitto xs = pieninpeitto (permutaatio xs)

Testaus

  1. Testaa lainalaisuutesi QuickCheckillä.
  2. Löysitkö virheitä? Kerro, mitä virheitä löysit, ja mikä testi paljasti ne.
  3. Testaa HPC ohjelmalla, että testisi kattavat koko kirjaston.
  4. Todista (käsin) mielestäsi olennaisin tai heikoimmin QuickCheckille sopiva lainalaisuus.

Testaus, osa 2

Tutustu SmallCheck kirjastoon

  1. Miten se eroaa quickchekista?
  2. Testaa joku ominaisuuksista smallcheckillä.
  3. Testaa joku toinen ominaisuuksista smallcheckillä.
  4. Testaa vielä kolmaskin ominaisuus smallcheckillä.

Suoritusaika

  1. Selvitä miten Criterion-moduli toimii. (Ks. myös kurssin video suoritusajan mittauksesta)
  2. Selvitä mikä on hitain operaatio kirjastossasi.
  3. (tähti) Paranna hitaimman operaation tehokkuutta. (Vastaukseksi voit esittää tekemäsi muutoksen)

(Tähti) Visualisaatio

  1. Toteuta myös funktiot alueiden visualisointiin

Reflektio

Tärkeää: Tämäkin on tehtävä!

  1. Listaa kaikki epäselväksi jääneet asiat, jotta osaat kysyä niistä demotilaisuudessa.
  2. Käy ryhmäsi kanssa läpi kaikki tehtävät ennen torstain demopalautusta
  3. Pohtikaa ryhmässä lyhyesti
blog comments powered by Disqus