From b35488efb091a6e5113fb1d0abdaa780dca47f9f Mon Sep 17 00:00:00 2001 From: Andrew Port Date: Mon, 1 Nov 2021 18:05:23 -0700 Subject: [PATCH] fix path hash unit test --- test/test_path.py | 107 +++++++++++++++++++++++----------------------- 1 file changed, 53 insertions(+), 54 deletions(-) diff --git a/test/test_path.py b/test/test_path.py index 04fb060..8285555 100644 --- a/test/test_path.py +++ b/test/test_path.py @@ -1,7 +1,7 @@ # External dependencies from __future__ import division, absolute_import, print_function import os -import sys +from sys import version_info import unittest from math import sqrt, pi from operator import itemgetter @@ -719,59 +719,58 @@ class ArcTest(unittest.TestCase): class TestPath(unittest.TestCase): - # def test_hash(self): - # line1 = Line(600.5 + 350.5j, 650.5 + 325.5j) - # arc1 = Arc(650 + 325j, 25 + 25j, -30, 0, 1, 700 + 300j) - # arc2 = Arc(650 + 325j, 30 + 25j, -30, 0, 0, 700 + 300j) - # cub1 = CubicBezier(650 + 325j, 25 + 25j, -30, 700 + 300j) - # cub2 = CubicBezier(700 + 300j, 800 + 400j, 750 + 200j, 600 + 100j) - # quad3 = QuadraticBezier(600 + 100j, 600, 600 + 300j) - # linez = Line(600 + 300j, 600 + 350j) - # - # bezpath = Path(line1, cub1, cub2, quad3) - # bezpathz = Path(line1, cub1, cub2, quad3, linez) - # path = Path(line1, arc1, cub2, quad3) - # pathz = Path(line1, arc1, cub2, quad3, linez) - # lpath = Path(linez) - # qpath = Path(quad3) - # cpath = Path(cub1) - # apath = Path(arc1, arc2) - # - # test_curves = [bezpath, bezpathz, path, pathz, lpath, qpath, cpath, - # apath, line1, arc1, arc2, cub1, cub2, quad3, linez] - # - # # this is necessary due to changes to the builtin `hash` function - # python_version = sys.version_info.major + 0.1*sys.version_info.minor - # user_hash_seed = os.environ.get("PYTHONHASHSEED", "") - # os.environ["PYTHONHASHSEED"] = "314" - # if 3.8 <= python_version: - # expected_hashes = [ - # -6073024107272494569, -2519772625496438197, 8726412907710383506, - # 2132930052750006195, 3112548573593977871, 991446120749438306, - # -5589397644574569777, -4438808571483114580, -3125333407400456536, - # -4418099728831808951, 702646573139378041, -6331016786776229094, - # 5053050772929443013, 6102272282813527681, -5385294438006156225 - # ] - # elif 3.2 <= python_version < 3.8: - # expected_hashes = [ - # -5662973462929734898, 5166874115671195563, 5223434942701471389, - # -7224979960884350294, -5178990533869800243, -4003140762934044601, - # 8575549467429100514, -6692132994808317852, 1594848578230132678, - # -6374833902132909499, 4188352014604112779, -5090374009174854814, - # -7093907105533857815, 2036243740727202243, -8108488067585685407 - # ] - # else: - # expected_hashes = [ - # -5762846476463470127, -138736730317965290, -2005041722222729058, - # 8448700906794235291, -5178990533869800243, -4003140762934044601, - # 8575549467429100514, 5166859065265868968, 1373103287265872323, - # -1022491904150314631, 4188352014604112779, -5090374009174854814, - # -7093907105533857815, 2036243740727202243, -8108488067585685407 - # ] - # - # for c, h in zip(test_curves, expected_hashes): - # self.assertTrue(hash(c) == h, msg="hash {} was expected for curve = {}".format(h, c)) - # os.environ["PYTHONHASHSEED"] = user_hash_seed # restore user's hash seed + def test_hash(self): + line1 = Line(600.5 + 350.5j, 650.5 + 325.5j) + arc1 = Arc(650 + 325j, 25 + 25j, -30, 0, 1, 700 + 300j) + arc2 = Arc(650 + 325j, 30 + 25j, -30, 0, 0, 700 + 300j) + cub1 = CubicBezier(650 + 325j, 25 + 25j, -30, 700 + 300j) + cub2 = CubicBezier(700 + 300j, 800 + 400j, 750 + 200j, 600 + 100j) + quad3 = QuadraticBezier(600 + 100j, 600, 600 + 300j) + linez = Line(600 + 300j, 600 + 350j) + + bezpath = Path(line1, cub1, cub2, quad3) + bezpathz = Path(line1, cub1, cub2, quad3, linez) + path = Path(line1, arc1, cub2, quad3) + pathz = Path(line1, arc1, cub2, quad3, linez) + lpath = Path(linez) + qpath = Path(quad3) + cpath = Path(cub1) + apath = Path(arc1, arc2) + + test_curves = [bezpath, bezpathz, path, pathz, lpath, qpath, cpath, + apath, line1, arc1, arc2, cub1, cub2, quad3, linez] + + # this is necessary due to changes to the builtin `hash` function + user_hash_seed = os.environ.get("PYTHONHASHSEED", "") + os.environ["PYTHONHASHSEED"] = "314" + if version_info.major >= 3 and version_info.minor >= 8: + expected_hashes = [ + -6073024107272494569, -2519772625496438197, 8726412907710383506, + 2132930052750006195, 3112548573593977871, 991446120749438306, + -5589397644574569777, -4438808571483114580, -3125333407400456536, + -4418099728831808951, 702646573139378041, -6331016786776229094, + 5053050772929443013, 6102272282813527681, -5385294438006156225 + ] + elif version_info.major == 3 and 2 <= version_info.minor < 8: + expected_hashes = [ + -5662973462929734898, 5166874115671195563, 5223434942701471389, + -7224979960884350294, -5178990533869800243, -4003140762934044601, + 8575549467429100514, -6692132994808317852, 1594848578230132678, + -6374833902132909499, 4188352014604112779, -5090374009174854814, + -7093907105533857815, 2036243740727202243, -8108488067585685407 + ] + else: + expected_hashes = [ + -5762846476463470127, -138736730317965290, -2005041722222729058, + 8448700906794235291, -5178990533869800243, -4003140762934044601, + 8575549467429100514, 5166859065265868968, 1373103287265872323, + -1022491904150314631, 4188352014604112779, -5090374009174854814, + -7093907105533857815, 2036243740727202243, -8108488067585685407 + ] + + for c, h in zip(test_curves, expected_hashes): + self.assertTrue(hash(c) == h, msg="hash {} was expected for curve = {}".format(h, c)) + os.environ["PYTHONHASHSEED"] = user_hash_seed # restore user's hash seed def test_circle(self): arc1 = Arc(0j, 100 + 100j, 0, 0, 0, 200 + 0j)