From 2d1e5ee4128bf4fa51ca4b58c17677e22d84accd Mon Sep 17 00:00:00 2001 From: gyu-don Date: Sun, 8 Mar 2020 02:49:12 +0900 Subject: [PATCH 1/2] Correct read_word test --- assignments/1_io_library/stud/test.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/assignments/1_io_library/stud/test.py b/assignments/1_io_library/stud/test.py index 793760b..b940fd4 100755 --- a/assignments/1_io_library/stud/test.py +++ b/assignments/1_io_library/stud/test.py @@ -276,7 +276,7 @@ def perform(self, arg): mov rax, 60 xor rdi, rdi syscall""", - lambda i, o, r: first_or_empty(i) == o), + lambda i, o, r: i == o), Test('read_word_length', lambda v:""" @@ -295,7 +295,7 @@ def perform(self, arg): mov rax, 60 mov rdi, rdx syscall""", - lambda i, o, r: len(first_or_empty(i)) == r or len(first_or_empty(i)) > 19), + lambda i, o, r: len(i) == r or len(i) > 19), Test('read_word_too_long', lambda v:""" @@ -314,7 +314,7 @@ def perform(self, arg): mov rdi, rax mov rax, 60 syscall""", - lambda i, o, r: ( (not len(first_or_empty(i)) > 19) and r != 0 ) or r == 0 ), + lambda i, o, r: ( (not len(i) > 19) and r != 0 ) or r == 0 ), Test('parse_uint', lambda v: """section .data @@ -440,7 +440,7 @@ def perform(self, arg): 'read_char' : ['-1', '-1234asdasd5234121', '', ' ', '\t ', 'hey ya ye ya', 'hello world' ], 'read_word' - : ['-1'], # , '-1234asdasd5234121', '', ' ', '\t ', 'hey ya ye ya', 'hello world' ], + : ['-1', '-1234asdasd5234121', '', ' ', '\t ', 'hey ya ye ya', 'hello world' ], 'read_word_length' : ['-1', '-1234asdasd5234121', '', ' ', '\t ', 'hey ya ye ya', 'hello world' ], 'read_word_too_long' From 0537423b41a361c039ad4ec974bc6e2db10f8600 Mon Sep 17 00:00:00 2001 From: gyu-don Date: Wed, 18 Mar 2020 18:49:45 +0900 Subject: [PATCH 2/2] test.py -> Work well on both py2 and py3 --- .../stud/{termcolor.pyc => termcolor_py2.pyc} | Bin assignments/1_io_library/stud/test.py | 46 ++++++++++++------ 2 files changed, 30 insertions(+), 16 deletions(-) rename assignments/1_io_library/stud/{termcolor.pyc => termcolor_py2.pyc} (100%) diff --git a/assignments/1_io_library/stud/termcolor.pyc b/assignments/1_io_library/stud/termcolor_py2.pyc similarity index 100% rename from assignments/1_io_library/stud/termcolor.pyc rename to assignments/1_io_library/stud/termcolor_py2.pyc diff --git a/assignments/1_io_library/stud/test.py b/assignments/1_io_library/stud/test.py index b940fd4..87ad402 100755 --- a/assignments/1_io_library/stud/test.py +++ b/assignments/1_io_library/stud/test.py @@ -1,12 +1,26 @@ #!/usr/bin/python +from __future__ import print_function, division +try: + bytes('foo', 'utf-8') +except: + u8_bytes = lambda a: a + u8_str = lambda a: a +else: + u8_bytes = lambda a: bytes(a, 'utf-8') + u8_str = lambda a: str(a, 'utf-8') + import os import subprocess import sys import re import sys from subprocess import CalledProcessError, Popen, PIPE -from termcolor import colored + +try: + from termcolor import colored +except ImportError: + from termcolor_py2 import colored #-------helpers--------------- @@ -45,10 +59,10 @@ def compile( fname, text ): f.close() if subprocess.call( ['nasm', '-f', 'elf64', fname + '.asm', '-o', fname+'.o'] ) == 0 and subprocess.call( ['ld', '-o' , fname, fname+'.o'] ) == 0: - print ' ', fname, ': compiled' + print(' ', fname, ': compiled') return True else: - print ' ', fname, ': failed to compile' + print(' ', fname, ': failed to compile') return False @@ -56,12 +70,12 @@ def launch( fname, seed = '' ): output = '' try: p = Popen(['./'+fname], shell=None, stdin=PIPE, stdout=PIPE) - (output, err) = p.communicate(input=seed) - return (output, p.returncode) + (output, err) = p.communicate(input=u8_bytes(seed)) + return (u8_str(output), p.returncode) except CalledProcessError as exc: return (exc.output, exc.returncode) else: - return (output, 0) + return (u8_str(output), 0) @@ -88,7 +102,7 @@ def perform(self, arg): if res is None: return False (output, code) = res - print '"', arg,'" ->', res + print('"', arg,'" ->', res) return self.checker( arg, output, code ) before_call=""" @@ -396,7 +410,7 @@ def perform(self, arg): err_too_long_msg: db "string is too long", 10, 0 section .data arg1: db '""" + v + """', 0 - arg2: times """ + str(len(v)/2) + """ db 66 + arg2: times """ + str(len(v)//2) + """ db 66 section .text %include "lib.inc" global _start @@ -404,7 +418,7 @@ def perform(self, arg): """ + before_call + """ mov rdi, arg1 mov rsi, arg2 - mov rdx, """ + str(len(v)/2 ) + """ + mov rdx, """ + str(len(v)//2) + """ call string_copy test rax, rax jnz .good @@ -461,17 +475,17 @@ def perform(self, arg): for arg in inputs[t.name]: if not found_error: try: - print ' testing', t.name,'on "'+ arg +'"' + print(' testing', t.name,'on "'+ arg +'"') res = t.perform(arg) if res: - print ' [', colored(' ok ', 'green'), ']' + print(' [', colored(' ok ', 'green'), ']') else: - print '* [ ', colored('fail', 'red'), ']' + print('* [ ', colored('fail', 'red'), ']') found_error = True - except: - print '* [ ', colored('fail', 'red'), '] with exception' , sys.exc_info()[0] + except KeyError: + print('* [ ', colored('fail', 'red'), '] with exception' , sys.exc_info()[0]) found_error = True if found_error: - print 'Not all tests have been passed' + print('Not all tests have been passed') else: - print colored( "Good work, all tests are passed", 'green') + print(colored( "Good work, all tests are passed", 'green'))