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