2019年6月17日月曜日

開発環境

The Ray Tracer Challenge: A Test-Driven Guide to Your First 3D Renderer (Jamis Buck(著)、Pragmatic Bookshelf)、Chapter 15(Triangles)のWavefront OBJFiles、Test #8: OBJ Parser with Gibberish Inputを取り組んでみる。

コード

obj_file_test.py

#!/usr/bin/env python3
from unittest import TestCase, main
from obj_file import Parser


class ParserTest(TestCase):
    def setUp(self):
        pass

    def tearDown(self):
        pass

    def test_ingoring_unrecognized_lines(self):
        with open('gibberish.obj') as gibberish:
            parser = Parser(gibberish)
        self.assertEqual(parser.ignored_lines, 5)


if __name__ == '__main__':
    main()

obj_file.py

class Parser:
    def __init__(self, fh):
        self.ignored_lines = 0
        for line in fh:
            cols = line.split()
            if len(cols) < 4 or cols[0] not in ['v', 'f']:
                self.ignored_lines += 1
                continue
            for i, col in enumerate(cols[1:], 1):
                try:
                    cols[i] = float(col)
                except ValueError as err:
                    self.ignored_lines += 1
                    break

入出力結果(Bash、cmd.exe(コマンドプロンプト)、Terminal、Jupyter(IPython))

C:\Users\...>py obj_file_test.py
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

C:\Users\...>

0 コメント:

コメントを投稿