def test_merge(self): stats = StatCounter([1.0, 2.0, 3.0, 4.0]) stats.merge(5.0) self.assertEqual(stats.count(), 5) self.assertEqual(stats.max(), 5.0) self.assertEqual(stats.mean(), 3.0) self.assertEqual(stats.min(), 1.0) self.assertAlmostEqual(stats.stdev(), 1.414213562373095) self.assertAlmostEqual(stats.sampleStdev(), 1.5811388300841898) self.assertEqual(stats.sum(), 15.0) self.assertAlmostEqual(stats.variance(), 2.0) self.assertAlmostEqual(stats.sampleVariance(), 2.5)
def test_merge_stats_with_self(self): stats = StatCounter([1.0, 2.0, 3.0, 4.0]) stats.mergeStats(stats) self.assertEqual(stats.count(), 8) self.assertEqual(stats.max(), 4.0) self.assertEqual(stats.mean(), 2.5) self.assertEqual(stats.min(), 1.0) self.assertAlmostEqual(stats.stdev(), 1.118033988749895) self.assertAlmostEqual(stats.sampleStdev(), 1.1952286093343936) self.assertEqual(stats.sum(), 20.0) self.assertAlmostEqual(stats.variance(), 1.25) self.assertAlmostEqual(stats.sampleVariance(), 1.4285714285714286)
def test_variance_when_size_zero(self): # SPARK-38854: Test case to improve test coverage when # StatCounter argument is empty list or None arguments = [[], None] for arg in arguments: stats = StatCounter(arg) self.assertTrue(math.isnan(stats.variance())) self.assertTrue(math.isnan(stats.sampleVariance())) self.assertEqual(stats.count(), 0) self.assertTrue(math.isinf(stats.max())) self.assertTrue(math.isinf(stats.min())) self.assertEqual(stats.mean(), 0.0)