Commit 01ffc2e41a3ff4d2330f7ba6818bc12f388ad003

Lisätty pisteiden määritys: oikeiden rivien suhde totuustaulun riveihin kerrottuna tehtävän maksimipistemäärällä. Pari turhaa riviä kommentoitu/poistettu, päivitetty testit maksimipistemäärällä
simcirtest.py
(29 / 24)
  
6868
6969
7070def DC(): return True
71def x(): return 'x'
7271
72#funcs = {'AND': AND, 'NOT': NOT, 'OR': OR, 'XOR': XOR, 'XNOR': XNOR, 'EOR': XOR, 'ENOR': XNOR, 'NAND(3in)': NAND}
7373
74funcs = {'AND': AND, 'NOT': NOT, 'OR': OR, 'XOR': XOR, 'XNOR': XNOR, 'EOR': XOR, 'ENOR': XNOR, 'NAND(3in)': NAND}
7574
76
7775class Device:
7876 def __init__(self, dat):
7977 self.dev_type = dat['type']
8080 self.x = int(dat['x'])
8181 self.y = int(dat['y'])
8282 self.num_inputs = int(dat.get('numInputs', -1))
83 self.func = funcs.get(self.label, None)
83 #self.func = funcs.get(self.label, None)
8484 if self.dev_type == 'NAND': self.label = 'NAND'
8585
8686 def tuple_type_label(self):
133133 # save the device id which is connected to LED (portti)
134134 # self.ulostulot.append(con.to_id);
135135 self.ulostulot.append(con)
136
137136 # self.komponentit = {} # käytetään tämän tilalla self.devices
138137 # self.reverse = reverse
139138
232232 if kytkemattomat != []:
233233 for k in kytkemattomat:
234234 lausekkeet[k] = 'x'
235 #lausekkeet[k] = 'False'
236 #if self.ulostulot == []:
237 # return
235
238236 for out in self.ulostulot:
239237 r = BinaryTree(out.to_id)
240238 self.muodostaPuu(self.connectors, r)
380380
381381def testaa_totuustaulut(expected, actual):
382382 '''
383 Luotetaan siihen että totuustaulut on samaan muotoa, etsitään poikkeavat totuustaulun rivit
383 Luotetaan siihen että totuustaulut on samaa muotoa, etsitään poikkeavat totuustaulun rivit
384384 palauttaa virheiden lukumäärän ja virheelliset totuustaulun rivit
385385 '''
386386 import difflib
400400 return virheita, difference
401401
402402
403def testaa_kaaviot(testikaavio, oikeakaavio):
403def testaa_kaaviot(testikaavio, oikeakaavio, maksimipisteet):
404404 '''
405405 Parametrien pitää olla JSON string simcirjs kaaviosta, esim.
406406 testikaavio = open('test.txt', 'r').read()
411411 oikeataulu = totuustaulu_kaaviosta(json.loads(oikeakaavio))
412412 # print testitaulu
413413 # print oikeataulu
414 return onko_virheita(testitaulu, oikeataulu)
414 return onko_virheita(testitaulu, oikeataulu, maksimipisteet)
415415
416416
417def testaa_lauseke_vs_kaavio(testikaavio, oikealauseke):
417def testaa_lauseke_vs_kaavio(testikaavio, oikealauseke, maksimipisteet):
418418 '''
419419 Parametrien pitää olla
420420 - testikaavio = JSON string simcirjs kaaviosta, esim. testikaavio = open('test.txt', 'r').read()
427427 oikeataulu = totuustaulu_lausekkeesta(oikealauseke)
428428 # print testitaulu
429429 # print oikeataulu
430 return onko_virheita(testitaulu, oikeataulu)
430 return onko_virheita(testitaulu, oikeataulu, maksimipisteet)
431431
432432def totuustaulu_muotoilu(totuustaulu):
433433 '''
461461 return muokattu
462462
463463
464def testaa_totuustaulu_vs_kaavio(testikaavio, oikeatotuustaulu):
464def testaa_totuustaulu_vs_kaavio(testikaavio, oikeatotuustaulu, maksimipisteet):
465465 '''
466466 Parametrien pitää olla
467467 - testikaavio = JSON string simcirjs kaaviosta, esim. testikaavio = open('test.txt', 'r').read()
473473 1 0 1 0
474474 1 1 0 1
475475 Muodostaa yo. kaltaisesta totuustaulusta vastaavanlaisen kuin kaaviosta, jotta voi verrata
476 Muodostaa testattavasta kaaviosta
476 Muodostaa testattavasta kaaviosta totuustaulun
477477 Palauttaa virheiden lukumäärän ja virheelliset totuustaulun rivit
478478 '''
479479 oikeataulu = totuustaulu_muotoilu(oikeatotuustaulu)
480480 testitaulu = totuustaulu_kaaviosta(json.loads(testikaavio))
481481 # print testitaulu
482482 # print oikeataulu
483 return onko_virheita(testitaulu, oikeataulu)
483 return onko_virheita(testitaulu, oikeataulu, maksimipisteet)
484484
485 #return virheita, virheet
486
487def onko_virheita(testitaulu, oikeataulu):
485def onko_virheita(testitaulu, oikeataulu, maksimipisteet):
486 '''
487 :param testitaulu: testattava totuustaulu
488 :param oikeataulu: oikea totuustaulu
489 :param maksimipisteet: tehtävän maksimipisteet
490 :return: tehtävästä saadut pisteet, virheelliset rivit (tai 'oikein' -teksti)
491 '''
488492 virheita, virherivit = testaa_totuustaulut(testitaulu, oikeataulu)
489 if virheita == 0:
490 return 0, "Oikein, täydet pisteet!\n"
493 oikeatrivit = oikeataulu.splitlines()
494 riveja = len(oikeatrivit) - 1 # poistetaan muuttuja/otsikko -rivi
491495 # Lisätään muuttujat ja output virheellisten rivien yläpuolelle
492 virheet = ' ' + oikeataulu.splitlines()[0] + '\n' + virherivit
493 return virheita, virheet
496 virheet = ' ' + oikeatrivit[0] + '\n' + virherivit
497 # maksimipisteet kerrotaan oikeiden rivien suhteella kaikkiin riveihin
498 pistekertoja = (riveja-virheita)/riveja
499 pisteet = round(maksimipisteet*pistekertoja*4)/4 # round to .25 intervals
500 #print(pisteet)
501 if virheita == 0:
502 return pisteet, "Oikein, täydet pisteet!\n" # pitäisikö tulostaa oikea totuustaulu?
503 return pisteet, virheet
494504
495505if __name__ == '__main__':
496 import sys
506 #import sys
497507
498508 ''' json.loads on siirretty aliohjelmiin
499509 testit siirretty testit.py tiedostoon
testit.py
(11 / 11)
  
11import sys
22import simcirtest
33
4def testit(otsikko, data, oikeadata, oikealauseke, oikeataulu):
4def testit(otsikko, data, oikeadata, oikealauseke, oikeataulu, maksimipisteet):
55 sys.stdout.write(otsikko + '\n')
66 sys.stdout.write('Kaavio vs. kaavio\n')
7 v1, v2 = simcirtest.testaa_kaaviot(data, oikeadata)
7 v1, v2 = simcirtest.testaa_kaaviot(data, oikeadata, maksimipisteet)
88 sys.stdout.write(v2)
9 sys.stdout.write('Virheet: ' + str(v1) + '\n\n')
9 sys.stdout.write('Pisteet: ' + str(v1) + '\n\n')
1010
1111 sys.stdout.write('Lauseke vs. kaavio\n')
12 v3, v4 = simcirtest.testaa_lauseke_vs_kaavio(data, oikealauseke)
12 v3, v4 = simcirtest.testaa_lauseke_vs_kaavio(data, oikealauseke, maksimipisteet)
1313 sys.stdout.write(v4)
14 sys.stdout.write('Virheet: ' + str(v3) + '\n\n')
14 sys.stdout.write('Pisteet: ' + str(v3) + '\n\n')
1515
1616 sys.stdout.write('Totuustaulu vs. kaavio\n')
17 v5, v6 = simcirtest.testaa_totuustaulu_vs_kaavio(data, oikeataulu)
17 v5, v6 = simcirtest.testaa_totuustaulu_vs_kaavio(data, oikeataulu, maksimipisteet)
1818 sys.stdout.write(v6)
19 sys.stdout.write('Virheet: ' + str(v5) + '\n\n')
19 sys.stdout.write('Pisteet: ' + str(v5) + '\n\n')
2020
2121
2222otsikko = 'Testi: Sininen ja Keltainen LED (kaavio oikein)'
3333"""
3434
3535
36testit(otsikko, data, oikeadata, oikealauseke, oikeataulu)
36testit(otsikko, data, oikeadata, oikealauseke, oikeataulu, 1)
3737
3838otsikko = 'Testi: Sininen ja Keltainen LED (kaaviossa virhe)'
3939data = open('koe6.txt', 'r').read()
40testit(otsikko, data, oikeadata, oikealauseke, oikeataulu)
40testit(otsikko, data, oikeadata, oikealauseke, oikeataulu, 1)
4141
4242otsikko = 'Testi: Sininen ja Keltainen LED (Keltainen LED kytkemättä)'
4343data = open('koe6_2.txt', 'r').read()
44testit(otsikko, data, oikeadata, oikealauseke, oikeataulu)
44testit(otsikko, data, oikeadata, oikealauseke, oikeataulu, 1)
4545
4646otsikko = 'Testi: A1,A1,A2,A3 ja B1,B1,B2,B3 yhtäsuuruus, monimutkainen versio, jossa kaikki portit (koe8.txt yksi ENOR vaihdettu NOR:ksi)'
4747data = open('koe8.txt', 'r').read()
3073071 1 1 1 1 1 1 1 1
308308"""
309309
310testit(otsikko, data, oikeadata, oikealauseke, oikeataulu)
310testit(otsikko, data, oikeadata, oikealauseke, oikeataulu, 8)