0

私の単体テストはすべてPython2.6.5での実行に成功しています。Python 2.7.3を実行すると、1つ失敗します。テストされるコードは複雑で、Python 2.6で必要とされたように、最初にstrに変換することにより、floatでの作業と、途中でDecimalへの変換が多く含まれます。

掘り始める前に、私は少し怠惰になって、誰かがこれを以前に見たことがあり、何を検索するかについての提案があるかどうかを確認できるかどうか疑問に思いました。テスト実行の結果は次のとおりです。

======================================================================
FAIL: test_hor_tpost_winsize_inside_mm (__main__.Test_ShutterCalculator)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "test_ShutterCalculator.py", line 506, in test_hor_tpost_winsize_inside_mm
    self.assertEqual(o.net_width_closing_tolerance, Decimal("6.4"))
AssertionError: Decimal('6.3') != Decimal('6.4')

----------------------------------------------------------------------

ユニットテストコードは次のtest_hor_tpost_winsize_inside_mm()とおりです。

490     def test_hor_tpost_winsize_inside_mm(self):
491         """
492         Same as above but test mm
493         """
494         o = self.opening
495         o.unit_of_measure = "millimeters"
496         o.formula_mode = "winsize"
497         o.mount = "inside"
498         o.given_width = Decimal("1117.6")
499         o.given_height = Decimal("2365.4")
500         o.louver_spacing = Decimal("101.6")
501         self.make4SidedFrame("9613", '9613: 2-1/2" Face Deco Z', Decimal("63.5"), Decimal("19.1"))
502         so1 = o.subopenings[(0,0)]
503         so1.fold_left = 1
504         so1.fold_right = 1
505         self.calc()
506         self.assertEqual(o.net_width_closing_tolerance, Decimal("6.4"))
507         self.assertEqual(o.net_height_closing_tolerance, Decimal("6.4"))
508         self.assertEqual(o.horizontal_shim, Decimal(".125"))  # in inches
509         self.assertEqual(o.vertical_shim, Decimal(".125"))  # in inches
510         self.assertEqual(o.width, Decimal("1069.8"))  ## 1070 converted directly from inches
511         self.assertEqual(o.height, Decimal("2317.6")) ## 2317.8 converted directy from inches
512         tpost = o.add_hor_tpost()
513         so2 = o.subopenings[(0,1)]
514         so2.fold_left = 1
515         so2.fold_right = 1
516         self.calc()
517         #self.cs()
518         self.assertEqual(o.net_width_closing_tolerance, Decimal("6.4"))
519         self.assertEqual(o.net_height_closing_tolerance, Decimal("12.7"))
520         self.assertEqual(o.horizontal_shim, Decimal(".125"))  # in inches
521         self.assertEqual(o.vertical_shim, Decimal(".125"))  # in inches
522         self.assertEqual(o.width, Decimal("1069.8"))  ## Rick had 42 but agreed that mine is right
523         self.assertEqual(o.height, Decimal("2311.3"))
524         self.assertEqual(so1.width, Decimal("1069.8"))
525         self.assertEqual(so2.width, Decimal("1069.8"))
526         self.assertEqual(so1.height, Decimal("1139.7"))  ## Rick had 44.8125 but agreed mine is right
527         self.assertEqual(so2.height, Decimal("1139.7"))
528         self.assertEqual(tpost.center_pos, Decimal("1182.7"))
529         top_panel_section = so1.panels[0].sections[(0,0)]
530         bottom_panel_section = so2.panels[0].sections[(0,0)]
531         self.assertEqual(top_panel_section.louver_count, 9)
532         self.assertEqual(bottom_panel_section.louver_count, 9)
533         self.assertEqual(top_panel_section.top_rail.width, Decimal("112.6"))  ## Rick had 4.40625, but given the changes to net
534         self.assertEqual(bottom_panel_section.bottom_rail.width, Decimal("112.7"))
535         self.assertEqual(top_panel_section.bottom_rail.width, Decimal("112.7"))
536         self.assertEqual(bottom_panel_section.top_rail.width, Decimal("112.6"))

不一致の原因を見つけるためにコードで何を検索するかについてのヒントはありますか?

4

1 に答える 1

1

Python 2.7 では、文字列から変換する際の精度を向上させるために、Decimalクラスと型に変更が導入されました。floatこれが変化の源かもしれません。

浮動小数点数と文字列の間の変換が、ほとんどのプラットフォームで正しく丸められるようになりました。これらの変換はさまざまな場所で行われます。浮動小数点数と複素数の str()。float および複雑なコンストラクター。数値フォーマット; marshal、pickle、および json モジュールを使用して、浮動小数点数と複素数をシリアライズおよびデシリアライズします。Python コードでの float および imaginary リテラルの解析。10 進数から浮動小数点数への変換。

変更の詳細は、「その他の言語の変更」の下で確認できます。

于 2013-01-19T15:23:31.423 に答える