Mercurial > repos > blastem
comparison gentests.py @ 224:f7ff02eeec2f
Added testcases for move and roxl/roxr. Made some small improvements to test tools.
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 21 Apr 2013 11:40:18 -0700 |
parents | cb72780e17b1 |
children | 42123feab62d |
comparison
equal
deleted
inserted
replaced
223:17534fb7c4f5 | 224:f7ff02eeec2f |
---|---|
14 self.avail_dregs = {0,1,2,3,4,5,6,7} | 14 self.avail_dregs = {0,1,2,3,4,5,6,7} |
15 self.avail_aregs = {0,1,2,3,4,5,6,7} | 15 self.avail_aregs = {0,1,2,3,4,5,6,7} |
16 instruction.consume_regs(self) | 16 instruction.consume_regs(self) |
17 self.inst = instruction | 17 self.inst = instruction |
18 | 18 |
19 def dirname(self): | |
20 return self.inst.name + '_' + self.inst.size | |
19 def name(self): | 21 def name(self): |
20 return str(self.inst).replace('.', '_').replace('#', '_').replace(',', '_').replace(' ', '_').replace('(', '[').replace(')', ']') | 22 return str(self.inst).replace('.', '_').replace('#', '_').replace(',', '_').replace(' ', '_').replace('(', '[').replace(')', ']') |
21 | 23 |
22 def write_rom_test(self, outfile): | 24 def write_rom_test(self, outfile): |
23 outfile.write('\tdc.l $0, start\n') | 25 outfile.write('\tdc.l $0, start\n') |
374 return ret | 376 return ret |
375 elif mode == '#n': | 377 elif mode == '#n': |
376 return rand_immediate(size) | 378 return rand_immediate(size) |
377 elif mode.startswith('#(') and mode.endswith(')'): | 379 elif mode.startswith('#(') and mode.endswith(')'): |
378 inner = mode[2:-1] | 380 inner = mode[2:-1] |
379 start,sep,end = inner.partition('-') | 381 start,sep,end = inner.rpartition('-') |
380 start,end = int(start),int(end) | 382 start,end = int(start),int(end) |
381 if end-start > 16: | 383 if end-start > 16: |
382 return [Immediate(randint(start, end)) for x in range(0,8)] | 384 return [Immediate(randint(start, end)) for x in range(0,8)] |
383 else: | 385 else: |
384 return [Immediate(num) for num in range(start, end+1)] | 386 return [Immediate(num) for num in range(start, end+1)] |
451 for line in f: | 453 for line in f: |
452 if not line.startswith('Name') and not line.startswith('#') and len(line.strip()) > 0: | 454 if not line.startswith('Name') and not line.startswith('#') and len(line.strip()) > 0: |
453 entries.append(Entry(line)) | 455 entries.append(Entry(line)) |
454 return entries | 456 return entries |
455 | 457 |
456 | 458 from os import path, mkdir |
457 def main(args): | 459 def main(args): |
458 entries = process_entries(open('testcases.txt')) | 460 entries = process_entries(open('testcases.txt')) |
459 for entry in entries: | 461 for entry in entries: |
460 programs = entry.programs() | 462 programs = entry.programs() |
461 for program in programs: | 463 for program in programs: |
462 f = open('generated_tests/' + program.name() + '.s68', 'w') | 464 dname = program.dirname() |
465 if not path.exists('generated_tests/' + dname): | |
466 mkdir('generated_tests/' + dname) | |
467 f = open('generated_tests/' + dname + '/' + program.name() + '.s68', 'w') | |
463 program.write_rom_test(f) | 468 program.write_rom_test(f) |
464 f.close() | 469 f.close() |
465 | 470 |
466 if __name__ == '__main__': | 471 if __name__ == '__main__': |
467 import sys | 472 import sys |