assertAlmostEqual(x, y)Python's unit testing framework में विधि x
और y
परीक्षण करती है कि वे लगभग समान हैं कि वे फ़्लोट हैं।assertAlmostEqual फ्लोट्स के संग्रह के लिए पायथन यूनिट-टेस्ट में
assertAlmostEqual()
के साथ समस्या यह है कि यह केवल फ्लोट पर काम करता है। मैं assertAlmostEqual()
जैसी एक विधि की तलाश में हूं जो फ्लोट्स, फ्लोट्स के सेट, फ्लोट्स के ट्यूट्स, फ्लोट्स के टुपल्स, फ्लोट्स के टुपल्स, फ्लोट्स की सूचियों के सेट इत्यादि की सूची,
उदाहरण के लिए, चलो x = 0.1234567890
, y = 0.1234567891
। x
और y
लगभग बराबर हैं क्योंकि वे अंतिम अंक को छोड़कर प्रत्येक अंक पर सहमत हैं। इसलिए self.assertAlmostEqual(x, y)
True
है क्योंकि assertAlmostEqual()
फ्लोट के लिए काम करता है।
मैं एक अधिक सामान्य assertAlmostEquals()
जो भी True
के लिए निम्न कॉल का मूल्यांकन करता है के लिए देख रहा हूँ:
self.assertAlmostEqual_generic([x, x, x], [y, y, y])
।self.assertAlmostEqual_generic({1: x, 2: x, 3: x}, {1: y, 2: y, 3: y})
।self.assertAlmostEqual_generic([(x,x)], [(y,y)])
।
क्या ऐसी कोई विधि है या क्या मुझे इसे स्वयं लागू करना है?
स्पष्टीकरण:
assertAlmostEquals()
places
नामक एक वैकल्पिक पैरामीटर है और संख्या अंतर दशमलवplaces
की संख्या को गोल कंप्यूटिंग से तुलना की जाती है। डिफ़ॉल्ट रूप सेplaces=7
, इसलिएself.assertAlmostEqual(0.5, 0.4)
गलत है जबकिself.assertAlmostEqual(0.12345678, 0.12345679)
सत्य है। मेरा सट्टाassertAlmostEqual_generic()
समान कार्यक्षमता होना चाहिए।दो सूचियों को लगभग बराबर माना जाता है यदि उनके पास बिल्कुल उसी क्रम में लगभग बराबर संख्याएं हैं। औपचारिक रूप से,
for i in range(n): self.assertAlmostEqual(list1[i], list2[i])
।इसी प्रकार, दो सेट लगभग बराबर माना जाता है अगर उन्हें लगभग बराबर सूचियों में परिवर्तित किया जा सकता है (प्रत्येक सेट को ऑर्डर सौंपकर)।
इसी तरह, दो शब्दकोशों को लगभग बराबर माना जाता है यदि प्रत्येक शब्दकोश का मुख्य सेट अन्य शब्दकोश के कुंजी सेट के बराबर होता है, और प्रत्येक ऐसी लगभग समान कुंजी जोड़ी के लिए लगभग समान मूल्य होता है।
सामान्य रूप से: मैं दो संग्रहों को लगभग बराबर मानता हूं यदि वे समान हैं जो कुछ समान फ्लोट्स को छोड़कर बराबर हैं जो लगभग एक दूसरे के बराबर हैं। दूसरे शब्दों में, मैं वास्तव में वस्तुओं की तुलना करना चाहता हूं लेकिन रास्ते में फ्लोट की तुलना करते समय कम (अनुकूलित) परिशुद्धता के साथ।
फ्लोट की तुलना करने के बजाय, आप स्ट्रिंग की तुलना कर रहे हैं? ठीक है ... लेकिन फिर, क्या एक सामान्य प्रारूप सेट करना आसान नहीं होगा? 'Fmt =" {{0: {0} f}} "प्रारूप (दशमलव)' की तरह, और अपने फ़्लोट्स को "स्ट्रिंग" करने के लिए इस 'fmt' प्रारूप का उपयोग करें? –
(मुझे पता है कि यह स्वाद का विषय है, लेकिन मुझे एक ही पंक्ति पर एक ही कथन मिला जैसे 'अगर' मुश्किल से पठनीय)। –
तो, जब आप कोई ऑर्डर नहीं करते हैं, तो आप सूचियों, tuples और सेट के लिए एक ही MO का उपयोग करते हैं ?! –