Skip to content

Commit 6feeebf

Browse files
committed
python3: Add semiconductor tests.
1 parent af3bf78 commit 6feeebf

2 files changed

Lines changed: 153 additions & 0 deletions

File tree

python3/electro_grammar/electro_grammar.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,39 @@ def exitRtype(self, ctx):
183183
if ctx.POT():
184184
self.obj['rtype'] = 'pot'
185185

186+
def exitDiode(self, ctx):
187+
self.obj['type'] = 'diode'
188+
189+
def exitDcode(self, ctx):
190+
self.obj['code'] = ctx.DCODE().getText().upper()
191+
192+
def exitSignal(self, ctx):
193+
self.obj['dtype'] = 'signal'
194+
195+
def exitRectifier(self, ctx):
196+
self.obj['dtype'] = 'rectifier'
197+
198+
def exitLed(self, ctx):
199+
self.obj['dtype'] = 'led'
200+
201+
def exitSchottky(self, ctx):
202+
self.obj['dtype'] = 'schottky'
203+
204+
def exitZener(self, ctx):
205+
self.obj['dtype'] = 'zener'
206+
207+
def exitColor(self, ctx):
208+
self.obj['color'] = ctx.COLOR().getText().lower()
209+
210+
def exitTransistor(self, ctx):
211+
self.obj['type'] = 'transistor'
212+
213+
def exitTtype(self, ctx):
214+
self.obj['ttype'] = ctx.TTYPE().getText().lower()
215+
216+
def exitTcode(self, ctx):
217+
self.obj['code'] = ctx.TCODE().getText().upper()
218+
186219

187220
def get_parser(start_rule):
188221
def parse(input):

python3/tests/test_parser.py

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,3 +283,123 @@ def test_parse_oscillator(self):
283283
assert osc['frequency'] == 16 * mega
284284
assert osc['tolerance'] == 1
285285
assert osc['capacitance'] == 12 * pico
286+
287+
288+
class ParseDiodeTests(unittest.TestCase):
289+
def test_parse_code(self):
290+
parse = parser('electro_grammar', key=False)
291+
d = parse('1N4148')
292+
assert d['type'] == 'diode'
293+
assert d['code'] == '1N4148'
294+
295+
def test_parse_signal(self):
296+
parse = parser('electro_grammar', key=False)
297+
d = parse('sig')
298+
assert d['type'] == 'diode'
299+
assert d['dtype'] == 'signal'
300+
301+
d = parse('sig 1N4148')
302+
assert d['type'] == 'diode'
303+
assert d['dtype'] == 'signal'
304+
assert d['code'] == '1N4148'
305+
306+
d = parse('1N4148 sig')
307+
assert d['type'] == 'diode'
308+
assert d['dtype'] == 'signal'
309+
assert d['code'] == '1N4148'
310+
311+
def test_parse_rectifier(self):
312+
parse = parser('electro_grammar', key=False)
313+
d = parse('rect')
314+
assert d['type'] == 'diode'
315+
assert d['dtype'] == 'rectifier'
316+
317+
d = parse('rect 1N4007')
318+
assert d['type'] == 'diode'
319+
assert d['dtype'] == 'rectifier'
320+
assert d['code'] == '1N4007'
321+
322+
d = parse('1N4007 rect')
323+
assert d['type'] == 'diode'
324+
assert d['dtype'] == 'rectifier'
325+
assert d['code'] == '1N4007'
326+
327+
def test_parse_schottky(self):
328+
parse = parser('electro_grammar', key=False)
329+
d = parse('sk')
330+
assert d['type'] == 'diode'
331+
assert d['dtype'] == 'schottky'
332+
333+
d = parse('sk BAT54S')
334+
assert d['type'] == 'diode'
335+
assert d['dtype'] == 'schottky'
336+
assert d['code'] == 'BAT54S'
337+
338+
d = parse('BAT54S sk')
339+
assert d['type'] == 'diode'
340+
assert d['dtype'] == 'schottky'
341+
assert d['code'] == 'BAT54S'
342+
343+
def test_parse_led(self):
344+
parse = parser('electro_grammar', key=False)
345+
d = parse('led white')
346+
assert d['type'] == 'diode'
347+
assert d['dtype'] == 'led'
348+
assert d['color'] == 'white'
349+
350+
def test_parse_zener(self):
351+
parse = parser('electro_grammar', key=False)
352+
d = parse('z 5V')
353+
assert d['type'] == 'diode'
354+
assert d['dtype'] == 'zener'
355+
assert d['voltage'] == 5
356+
357+
358+
class ParseTransistorTests(unittest.TestCase):
359+
def test_parse_code(self):
360+
parse = parser('electro_grammar', key=False)
361+
q = parse('2N2222')
362+
assert q['type'] == 'transistor'
363+
assert q['code'] == '2N2222'
364+
365+
def test_parse_npn(self):
366+
parse = parser('electro_grammar', key=False)
367+
q = parse('npn 2N2222')
368+
assert q['type'] == 'transistor'
369+
assert q['ttype'] == 'npn'
370+
assert q['code'] == '2N2222'
371+
372+
q = parse('2N2222 npn')
373+
assert q['type'] == 'transistor'
374+
assert q['ttype'] == 'npn'
375+
assert q['code'] == '2N2222'
376+
377+
def test_parse_pnp(self):
378+
parse = parser('electro_grammar', key=False)
379+
q = parse('pnp BC547')
380+
assert q['type'] == 'transistor'
381+
assert q['ttype'] == 'pnp'
382+
assert q['code'] == 'BC547'
383+
384+
q = parse('BC547 pnp')
385+
assert q['type'] == 'transistor'
386+
assert q['ttype'] == 'pnp'
387+
assert q['code'] == 'BC547'
388+
389+
def test_parse_nmos(self):
390+
parse = parser('electro_grammar', key=False)
391+
q = parse('nmos 2N7000')
392+
assert q['type'] == 'transistor'
393+
assert q['ttype'] == 'nmos'
394+
assert q['code'] == '2N7000'
395+
396+
q = parse('2N7000 nmos')
397+
assert q['type'] == 'transistor'
398+
assert q['ttype'] == 'nmos'
399+
assert q['code'] == '2N7000'
400+
401+
def test_parse_pmos(self):
402+
parse = parser('electro_grammar', key=False)
403+
q = parse('pmos')
404+
assert q['type'] == 'transistor'
405+
assert q['ttype'] == 'pmos'

0 commit comments

Comments
 (0)