Commit 68e23670676a63755df4d42a852834d488c4a804

  • Tree SHA1: 27b219a
  • Parent SHA1: eefc995 (Lisätty testit tapauksille jossa opiskelija laittaa ylimääräisiä kytkimiä tai LEDejä. Duplikaattikytkinten havaitsemiseksi muutettu terminals set:stä list:ksi. Jossain vaiheessa täytyy varmaan lisätä tarkistukset sille ettäopettajan syöttämissä 'oikeissa' ratkaisuissa ei ole syntaksi virheitä)
  • raw diff | raw patch
Lisätty testi takaisinkytkennälle (jota ei sallita). Odotetaan RecursionError:ia, pitäisi muuttaa puun toteutusta, jotta takaisinkytkentä voitaisiin havaita ennen puun rakentamista (tarkasta onko nkyisestä solmusta polulla juurisolmuun jo olemassa dev_id jota ollaan lisäämässä). Jos joskus haluaa automaattitestata kiikkuja ym. kytkentöjä, joissa takaisinkytkentä, niin pitää miettiä toteutus uusiksi, eli havaita takaisinkytkentä ja sen perusteella tehdä ihan oma testi, joka on ajasta riippuva, aiheuttaa viivettä takaisinkytkentään...
koe6_takaisinkytkenta.txt
(25 / 0)
  
1{
2 "devices":[
3 {"type":"DC","id":"dev0","x":56,"y":144,"label":"DC"},
4 {"type":"Toggle","id":"dev1","x":160,"y":72,"label":"a"},
5 {"type":"Toggle","id":"dev2","x":160,"y":144,"label":"sel"},
6 {"type":"LED","id":"dev3","x":576,"y":72,"label":"Keltainen","color":"#ffff00"},
7 {"type":"LED","id":"dev4","x":576,"y":144,"label":"Sininen","color":"#0000ff"},
8 {"type":"AND","id":"dev5","x":344,"y":40,"label":"AND"},
9 {"type":"NOT","id":"dev6","x":264,"y":192,"label":"NOT"},
10 {"type":"AND","id":"dev7","x":352,"y":160,"label":"AND"},
11 {"type":"NOT","id":"dev8","x":352,"y":104,"label":"NOT"}
12 ],
13 "connectors":[
14 {"from":"dev1.in0","to":"dev0.out0"},
15 {"from":"dev2.in0","to":"dev0.out0"},
16 {"from":"dev3.in0","to":"dev7.out0"},
17 {"from":"dev4.in0","to":"dev5.out0"},
18 {"from":"dev5.in0","to":"dev1.out0"},
19 {"from":"dev5.in1","to":"dev2.out0"},
20 {"from":"dev6.in0","to":"dev2.out0"},
21 {"from":"dev7.in0","to":"dev8.out0"},
22 {"from":"dev7.in1","to":"dev6.out0"},
23 {"from":"dev8.in0","to":"dev7.out0"}
24 ]
25}
simcirtest.py
(13 / 8)
  
3535 def __str__(self):
3636 return '(' + str(self.root) + ' ' + str(self.left) + ' ' + str(self.right) + ')'
3737
38
3938def AND(*x):
4039 if len(x) < 2:
4140 return False
231231 for out in self.ulostulot:
232232 testlist.append(self.devices[out.from_id].label)
233233
234 for c in self.connectors:
235 if c.from_id == c.to_id: # Takaisinkytkentä (suoraan sisäänmenoon ulostulosta, helppo havaita, ei turhaan odoteta RecursionExce)
236 return -3
237
234238 if len(testlist) != len(set(testlist)): # Jos duplikaatti LEDejä
235239 return -1
236240 if len(self.terminals) != len(set(self.terminals)): # Jos duplikaatti LEDejä
245245 lausekkeet[k] = 'x'
246246
247247 for out in self.ulostulot:
248 r = BinaryTree(out.to_id)
249 self.muodostaPuu(self.connectors, r)
250 lauseke = self.yhdista(r)
251 # lausekkeet[out.from_id]=self.yhdista(r)
252 lausekkeet[self.devices[out.from_id].label] = self.yhdista(r) # use label
248 try:
249 r = BinaryTree(out.to_id)
250 self.muodostaPuu(self.connectors, r)
251 lausekkeet[self.devices[out.from_id].label] = self.yhdista(r) # use label
252 except RecursionError:
253 return -3 # Takaisinkytkentä (useamman komponentin kautta, ei helppo testata, joten napataan poikkeuksella)
253254
254255 return self.lausekkeesta_totuustaulu(lausekkeet)
255256
287287 for con in lines:
288288 if puu.getRootVal() == con.from_id:
289289 komp = self.devices[con.to_id].dev_type
290 if komp == 'DC' and self.devices[
291 puu.getRootVal()].dev_type == 'Toggle': # Switch connected to DC, continue
290 if komp == 'DC' and self.devices[puu.getRootVal()].dev_type == 'Toggle': # Switch connected to DC, continue
292291 continue
293292 if not puu.getLeftChild():
294293 puu = puu.insertLeft(con.to_id)
511511 return 0.0, "Kytkennässä samannimisiä ulostuloja, poista ylimääräiset.\nSisäänmenot ja ulostulot tulee olla: " + oikeatrivit[0] + "\n"
512512 if testitaulu == -2: # Duplikaatti kytkin
513513 return 0.0, "Kytkennässä samannimisiä sisäänmenoja, poista ylimääräiset.\nSisäänmenot ja ulostulot tulee olla: " + oikeatrivit[0] + "\n"
514 if testitaulu == -3: # Takaisinkytkentä
515 return 0.0, "Kytkennässä takaisinkytkentä (portin ulostulo kytketty omaan sisäänmenoon, joko suoraan tai muiden porttien kautta). Poista takaisinkytkentä.\n"
514516 virheita, virherivit = testaa_totuustaulut(testitaulu, oikeataulu)
515517 # Lisätään muuttujat ja output virheellisten rivien yläpuolelle
516518 virheet = ' ' + oikeatrivit[0] + '\n' + virherivit
testit.py
(4 / 0)
  
7575data = open('koe6_dupKytkin.txt', 'r').read()
7676testit(otsikko, data, oikeadata, oikealauseke, oikeataulu, 1)
7777
78otsikko = 'Testi: Sininen ja Keltainen LED (takaisinkytkentä)'
79data = open('koe6_takaisinkytkenta.txt', 'r').read()
80testit(otsikko, data, oikeadata, oikealauseke, oikeataulu, 1)
81
7882otsikko = 'Testi: A1,A1,A2,A3 ja B1,B1,B2,B3 yhtäsuuruus, monimutkainen versio, jossa kaikki portit (koe8.txt yksi ENOR vaihdettu NOR:ksi)'
7983data = open('koe8.txt', 'r').read()
8084oikeadata = open('k8.txt', 'r').read()