Example #1
0
    def test_context_managers(self):
        """Test the context manager support of the functions."""
        # rtol and atol
        for func in (
            cfdm.atol,
            cfdm.rtol,
        ):
            old = func()
            new = old * 2
            with func(new):
                self.assertEqual(func(), new)
                self.assertEqual(func(new * 2), new)
                self.assertEqual(func(), new * 2)

            self.assertEqual(func(), old)

        # log_level
        func = cfdm.log_level

        org = func("DETAIL")
        old = func()
        new = "DEBUG"
        with func(new):
            self.assertEqual(func(), new)

        self.assertEqual(func(), old)
        func(org)

        del org._func
        with self.assertRaises(AttributeError):
            with org:
                pass

        # Full configuration
        func = cfdm.configuration

        org = func(rtol=10, atol=20, log_level="DETAIL")
        old = func()
        new = dict(rtol=10 * 2, atol=20 * 2, log_level="DEBUG")
        with func(**new):
            self.assertEqual(func(), new)

        self.assertEqual(func(), old)
        func(**org)

        org = func(rtol=cfdm.Constant(10), atol=20, log_level="DETAIL")
        old = func()
        new = dict(rtol=cfdm.Constant(10 * 2), atol=20 * 2, log_level="DEBUG")
        with func(**new):
            self.assertEqual(func(), new)

        self.assertEqual(func(), old)
        func(**org)
Example #2
0
    def test_Constant(self):
        """Test the Constant class."""
        c = cfdm.Constant(20)
        d = cfdm.Constant(10)
        e = cfdm.Constant(999)

        self.assertIsInstance(hash(c), int)
        self.assertIsInstance(repr(c), str)

        self.assertEqual(float(c), 20.0)
        self.assertEqual(int(c), 20)
        self.assertEqual(str(c), "20")

        # Binary operations
        self.assertEqual(c, 20)
        self.assertEqual(20, c)
        self.assertEqual(c, c)
        self.assertEqual(c, copy.deepcopy(c))
        self.assertEqual(c, numpy.array(20))

        self.assertNotEqual(c, 999)
        self.assertNotEqual(999, c)
        self.assertNotEqual(c, d)
        self.assertNotEqual(c, numpy.array(999))
        self.assertNotEqual(numpy.array(999), c)

        self.assertLess(c, 999)
        self.assertLessEqual(c, 999)
        self.assertGreater(c, 10)
        self.assertGreaterEqual(c, 10)

        self.assertGreater(999, c)
        self.assertGreaterEqual(999, c)
        self.assertLess(10, c)
        self.assertLessEqual(10, c)

        self.assertLess(c, e)
        self.assertLessEqual(c, e)
        self.assertGreater(c, d)
        self.assertGreaterEqual(c, d)

        self.assertEqual(c + 10, 30)
        self.assertEqual(c - 10, 10)
        self.assertEqual(c / 10, 2)
        self.assertEqual(c * 10, 200)
        self.assertEqual(c // 10, 2)

        self.assertEqual(c + d, 30)
        self.assertEqual(c - d, 10)
        self.assertEqual(c / d, 2)
        self.assertEqual(c * d, 200)
        self.assertEqual(c // d, 2)

        self.assertEqual(20 + d, 30)
        self.assertEqual(20 - d, 10)
        self.assertEqual(20 / d, 2)
        self.assertEqual(20 * d, 200)
        self.assertEqual(20 // d, 2)

        c = cfdm.Constant(20)
        c -= 10
        self.assertEqual(c, 10)
        c += 10
        self.assertEqual(c, 20)
        c *= 10
        self.assertEqual(c, 200)
        c /= 10
        self.assertEqual(c, 20)
        c //= 10
        self.assertEqual(c, 2)

        # Unary operations
        c = cfdm.Constant(-20)
        self.assertEqual(-c, 20)
        self.assertEqual(abs(c), 20)
        self.assertEqual(+c, -20)

        # Copy
        c = cfdm.atol().copy()
        del c._func
        self.assertEqual(c, c.copy())

        # Bool
        self.assertTrue(cfdm.Constant(1))
        self.assertTrue(cfdm.Constant(True))
        self.assertFalse(cfdm.Constant(0))
        self.assertFalse(cfdm.Constant(False))