def test_volume_3D(self):
        # type: (ResultSetTestCase) -> None

        self.assertEqual(0.0, self.rs_3D.overlapping_volume_yup())
        self.assertEqual(0.0, self.rs_3D.overlapping_volume_ylow())
        self.assertAlmostEqual(1.7168407867280266e-05, self.rs_3D.overlapping_volume_border())
        self.assertAlmostEqual(2.0029416264500524e-05, self.rs_3D.overlapping_volume_total())

        # May differ in the last decimals because of arithmetic precision
        self.assertAlmostEqual(0.2968666554443193, self.rs_3D.volume_yup())
        self.assertAlmostEqual(0.2968699931807370, self.rs_3D.volume_ylow())
        self.assertAlmostEqual(0.4062633513749437, self.rs_3D.volume_border())
        self.assertAlmostEqual(self.rs_3D.volume_border(), self.rs_3D.volume_border_2())
        # self.assertAlmostEqual(0.4062633501234191, self.rs_3D.volume_border_2())

        # Simplify the current result set (i.e., fusion of contiguous rectangles).
        # Overlapping should disappear
        # Volume should remain identical to previous computations.
        # rs_sim = copy.deepcopy(self.rs_3D)
        rs_sim = ResultSet(self.border_3D, self.ylow_3D, self.yup_3D, self.xspace_3D)
        rs_sim.simplify()
        rs_sim.fusion()

        self.assertEqual(0.0, rs_sim.overlapping_volume_yup())
        self.assertEqual(0.0, rs_sim.overlapping_volume_ylow())
        self.assertEqual(0.0, rs_sim.overlapping_volume_border())
        self.assertEqual(0.0, rs_sim.overlapping_volume_total())

        # May differ in the last decimals because of arithmetic precision
        self.assertAlmostEqual(0.34374141701118816, rs_sim.volume_yup())
        self.assertAlmostEqual(0.3124945163472164, rs_sim.volume_ylow())
        self.assertAlmostEqual(0.3437640666415955, rs_sim.volume_border())
        self.assertAlmostEqual(0.3437640666415954, rs_sim.volume_border_2())
        self.assertAlmostEqual(rs_sim.volume_border(), rs_sim.volume_border_2())
    def test_volume_2D(self):
        # type: (ResultSetTestCase) -> None

        self.assertEqual(0.0, self.rs_2D.overlapping_volume_yup())
        self.assertEqual(0.0, self.rs_2D.overlapping_volume_ylow())
        self.assertAlmostEqual(3.492557355327832e-10, self.rs_2D.overlapping_volume_border())
        self.assertAlmostEqual(3.492557355327832e-10, self.rs_2D.overlapping_volume_total())

        # May differ in the last decimals because of arithmetic precision
        self.assertAlmostEqual(0.42186760904587917, self.rs_2D.volume_yup())
        self.assertAlmostEqual(0.42186951636540826, self.rs_2D.volume_ylow())
        self.assertAlmostEqual(0.15626287458871257, self.rs_2D.volume_border())
        self.assertAlmostEqual(self.rs_2D.volume_border(), self.rs_2D.volume_border_2())

        # Simplify the current result set (i.e., fusion of contiguous rectangles).
        # Overlapping should disappear
        # Volume should remain identical to previous computations.
        # rs_sim = copy.deepcopy(self.rs_2D)
        rs_sim = ResultSet(self.border_2D, self.ylow_2D, self.yup_2D, self.xspace_2D)
        rs_sim.simplify()
        rs_sim.fusion()

        self.assertEqual(0.0, rs_sim.overlapping_volume_yup())
        self.assertEqual(0.0, rs_sim.overlapping_volume_ylow())
        self.assertEqual(0.0, rs_sim.overlapping_volume_border())
        self.assertEqual(0.0, rs_sim.overlapping_volume_total())

        # May differ in the last decimals because of arithmetic precision
        self.assertAlmostEqual(rs_sim.volume_yup(), self.rs_2D.volume_yup())
        self.assertAlmostEqual(rs_sim.volume_ylow(), self.rs_2D.volume_ylow())
        self.assertAlmostEqual(rs_sim.volume_border(), self.rs_2D.volume_border())
        self.assertAlmostEqual(rs_sim.volume_border_2(), self.rs_2D.volume_border_2())
        self.assertAlmostEqual(rs_sim.volume_border(), rs_sim.volume_border_2())