Ejemplo n.º 1
0
    def test_parse_simple(self):

        a = Context.__keytransform__(UnitsContainer({'[time]': -1}), UnitsContainer({'[length]': 1}))
        b = Context.__keytransform__(UnitsContainer({'[length]': 1}), UnitsContainer({'[time]': -1}))

        s = ['@context longcontextname',
             '[length] -> 1 / [time]: c / value',
             '1 / [time] -> [length]: c / value']

        c = Context.from_lines(s)
        self.assertEqual(c.name, 'longcontextname')
        self.assertEqual(c.aliases, ())
        self.assertEqual(c.defaults, {})
        self.assertEqual(set(c.funcs.keys()), set((a, b)))
        self._test_ctx(c)

        s = ['@context longcontextname = lc',
             '[length] <-> 1 / [time]: c / value']

        c = Context.from_lines(s)
        self.assertEqual(c.name, 'longcontextname')
        self.assertEqual(c.aliases, ('lc', ))
        self.assertEqual(c.defaults, {})
        self.assertEqual(set(c.funcs.keys()), set((a, b)))
        self._test_ctx(c)

        s = ['@context longcontextname = lc = lcn',
             '[length] <-> 1 / [time]: c / value']

        c = Context.from_lines(s)
        self.assertEqual(c.name, 'longcontextname')
        self.assertEqual(c.aliases, ('lc', 'lcn', ))
        self.assertEqual(c.defaults, {})
        self.assertEqual(set(c.funcs.keys()), set((a, b)))
        self._test_ctx(c)
Ejemplo n.º 2
0
    def test_parse_parameterized(self):
        a = Context.__keytransform__(UnitsContainer({"[time]": -1.0}),
                                     UnitsContainer({"[length]": 1.0}))
        b = Context.__keytransform__(UnitsContainer({"[length]": 1.0}),
                                     UnitsContainer({"[time]": -1.0}))

        s = [
            "@context(n=1) longcontextname",
            "[length] <-> 1 / [time]: n * c / value"
        ]

        c = Context.from_lines(s)
        self.assertEqual(c.defaults, {"n": 1})
        self.assertEqual(c.funcs.keys(), {a, b})
        self._test_ctx(c)

        s = [
            "@context(n=1, bla=2) longcontextname",
            "[length] <-> 1 / [time]: n * c / value / bla",
        ]

        c = Context.from_lines(s)
        self.assertEqual(c.defaults, {"n": 1, "bla": 2})
        self.assertEqual(c.funcs.keys(), {a, b})

        # If the variable is not present in the definition, then raise an error
        s = [
            "@context(n=1) longcontextname",
            "[length] <-> 1 / [time]: c / value"
        ]
        self.assertRaises(DefinitionSyntaxError, Context.from_lines, s)
Ejemplo n.º 3
0
    def test_parse_simple(self):

        a = Context.__keytransform__(UnitsContainer({'[time]': -1}), UnitsContainer({'[length]': 1}))
        b = Context.__keytransform__(UnitsContainer({'[length]': 1}), UnitsContainer({'[time]': -1}))

        s = ['@context longcontextname',
             '[length] -> 1 / [time]: c / value',
             '1 / [time] -> [length]: c / value']

        c = Context.from_lines(s)
        self.assertEqual(c.name, 'longcontextname')
        self.assertEqual(c.aliases, ())
        self.assertEqual(c.defaults, {})
        self.assertEqual(set(c.funcs.keys()), set((a, b)))
        self._test_ctx(c)

        s = ['@context longcontextname = lc',
             '[length] <-> 1 / [time]: c / value']

        c = Context.from_lines(s)
        self.assertEqual(c.name, 'longcontextname')
        self.assertEqual(c.aliases, ('lc', ))
        self.assertEqual(c.defaults, {})
        self.assertEqual(set(c.funcs.keys()), set((a, b)))
        self._test_ctx(c)

        s = ['@context longcontextname = lc = lcn',
             '[length] <-> 1 / [time]: c / value']

        c = Context.from_lines(s)
        self.assertEqual(c.name, 'longcontextname')
        self.assertEqual(c.aliases, ('lc', 'lcn', ))
        self.assertEqual(c.defaults, {})
        self.assertEqual(set(c.funcs.keys()), set((a, b)))
        self._test_ctx(c)
Ejemplo n.º 4
0
    def test_parse_simple(self):

        a = Context.__keytransform__(UnitsContainer({"[time]": -1}), UnitsContainer({"[length]": 1}))
        b = Context.__keytransform__(UnitsContainer({"[length]": 1}), UnitsContainer({"[time]": -1}))

        s = ["@context longcontextname", "[length] -> 1 / [time]: c / value", "1 / [time] -> [length]: c / value"]

        c = Context.from_lines(s)
        self.assertEqual(c.name, "longcontextname")
        self.assertEqual(c.aliases, ())
        self.assertEqual(c.defaults, {})
        self.assertEqual(set(c.funcs.keys()), set((a, b)))
        self._test_ctx(c)

        s = ["@context longcontextname = lc", "[length] <-> 1 / [time]: c / value"]

        c = Context.from_lines(s)
        self.assertEqual(c.name, "longcontextname")
        self.assertEqual(c.aliases, ("lc",))
        self.assertEqual(c.defaults, {})
        self.assertEqual(set(c.funcs.keys()), set((a, b)))
        self._test_ctx(c)

        s = ["@context longcontextname = lc = lcn", "[length] <-> 1 / [time]: c / value"]

        c = Context.from_lines(s)
        self.assertEqual(c.name, "longcontextname")
        self.assertEqual(c.aliases, ("lc", "lcn"))
        self.assertEqual(c.defaults, {})
        self.assertEqual(set(c.funcs.keys()), set((a, b)))
        self._test_ctx(c)
Ejemplo n.º 5
0
    def test_parse_parameterized(self):
        a = Context.__keytransform__(UnitsContainer({'[time]': -1.}),
                                     UnitsContainer({'[length]': 1.}))
        b = Context.__keytransform__(UnitsContainer({'[length]': 1.}),
                                     UnitsContainer({'[time]': -1.}))

        s = [
            '@context(n=1) longcontextname',
            '[length] <-> 1 / [time]: n * c / value'
        ]

        c = Context.from_lines(s)
        self.assertEqual(c.defaults, {'n': 1})
        self.assertEqual(set(c.funcs.keys()), set((a, b)))
        self._test_ctx(c)

        s = [
            '@context(n=1, bla=2) longcontextname',
            '[length] <-> 1 / [time]: n * c / value / bla'
        ]

        c = Context.from_lines(s)
        self.assertEqual(c.defaults, {'n': 1, 'bla': 2})
        self.assertEqual(set(c.funcs.keys()), set((a, b)))

        # If the variable is not present in the definition, then raise an error
        s = [
            '@context(n=1) longcontextname',
            '[length] <-> 1 / [time]: c / value'
        ]
        self.assertRaises(ValueError, Context.from_lines, s)
Ejemplo n.º 6
0
 def test_err_redefine_alias(self):
     for s in ("foo = bar = f", "foo = bar = _ = baz"):
         with self.subTest(s):
             with self.assertRaises(DefinitionSyntaxError) as e:
                 Context.from_lines(["@context c", s])
             self.assertEqual(
                 str(e.exception),
                 "Can't change a unit's symbol or aliases within a context",
             )
Ejemplo n.º 7
0
 def test_parse_invalid(self):
     for badrow in (
             "[length] = 1 / [time]: c / value",
             "1 / [time] = [length]: c / value",
             "[length] <- [time] = c / value",
             "[length] - [time] = c / value",
     ):
         with self.subTest(badrow):
             with self.assertRaises(DefinitionSyntaxError):
                 Context.from_lines(["@context c", badrow])
Ejemplo n.º 8
0
    def test_parse_define(self):
        a = Context.__keytransform__(UnitsContainer({"[time]": -1}), UnitsContainer({"[length]": 1.0}))
        b = Context.__keytransform__(UnitsContainer({"[length]": 1}), UnitsContainer({"[time]": -1.0}))

        s = ["@context longcontextname", "[length] <-> 1 / [time]: c / value"]
        c = Context.from_lines(s)
        self.assertEqual(c.defaults, {})
        self.assertEqual(set(c.funcs.keys()), set((a, b)))
        self._test_ctx(c)
Ejemplo n.º 9
0
    def test_parse_define(self):
        a = Context.__keytransform__(UnitsContainer({'[time]': -1}), UnitsContainer({'[length]': 1.}))
        b = Context.__keytransform__(UnitsContainer({'[length]': 1}), UnitsContainer({'[time]': -1.}))

        s = ['@context longcontextname',
             '[length] <-> 1 / [time]: c / value']
        c = Context.from_lines(s)
        self.assertEqual(c.defaults, {})
        self.assertEqual(set(c.funcs.keys()), set((a, b)))
        self._test_ctx(c)
Ejemplo n.º 10
0
    def test_parse_simple(self):

        a = Context.__keytransform__(UnitsContainer({"[time]": -1}),
                                     UnitsContainer({"[length]": 1}))
        b = Context.__keytransform__(UnitsContainer({"[length]": 1}),
                                     UnitsContainer({"[time]": -1}))

        s = [
            "@context longcontextname",
            "[length] -> 1 / [time]: c / value",
            "1 / [time] -> [length]: c / value",
        ]

        c = Context.from_lines(s)
        self.assertEqual(c.name, "longcontextname")
        self.assertEqual(c.aliases, ())
        self.assertEqual(c.defaults, {})
        self.assertEqual(c.funcs.keys(), {a, b})
        self._test_ctx(c)

        s = [
            "@context longcontextname = lc",
            "[length] <-> 1 / [time]: c / value"
        ]

        c = Context.from_lines(s)
        self.assertEqual(c.name, "longcontextname")
        self.assertEqual(c.aliases, ("lc", ))
        self.assertEqual(c.defaults, {})
        self.assertEqual(c.funcs.keys(), {a, b})
        self._test_ctx(c)

        s = [
            "@context longcontextname = lc = lcn",
            "[length] <-> 1 / [time]: c / value",
        ]

        c = Context.from_lines(s)
        self.assertEqual(c.name, "longcontextname")
        self.assertEqual(c.aliases, ("lc", "lcn"))
        self.assertEqual(c.defaults, {})
        self.assertEqual(c.funcs.keys(), {a, b})
        self._test_ctx(c)
Ejemplo n.º 11
0
    def test_parse_simple(self):

        a = Context.__keytransform__(UnitsContainer({"[time]": -1}),
                                     UnitsContainer({"[length]": 1}))
        b = Context.__keytransform__(UnitsContainer({"[length]": 1}),
                                     UnitsContainer({"[time]": -1}))

        s = [
            "@context longcontextname",
            "[length] -> 1 / [time]: c / value",
            "1 / [time] -> [length]: c / value",
        ]

        c = Context.from_lines(s)
        assert c.name == "longcontextname"
        assert c.aliases == ()
        assert c.defaults == {}
        assert c.funcs.keys() == {a, b}
        self._test_ctx(c)

        s = [
            "@context longcontextname = lc",
            "[length] <-> 1 / [time]: c / value"
        ]

        c = Context.from_lines(s)
        assert c.name == "longcontextname"
        assert c.aliases == ("lc", )
        assert c.defaults == {}
        assert c.funcs.keys() == {a, b}
        self._test_ctx(c)

        s = [
            "@context longcontextname = lc = lcn",
            "[length] <-> 1 / [time]: c / value",
        ]

        c = Context.from_lines(s)
        assert c.name == "longcontextname"
        assert c.aliases == ("lc", "lcn")
        assert c.defaults == {}
        assert c.funcs.keys() == {a, b}
        self._test_ctx(c)
Ejemplo n.º 12
0
    def test_parse_parameterized(self):
        a = Context.__keytransform__(UnitsContainer({"[time]": -1.0}), UnitsContainer({"[length]": 1.0}))
        b = Context.__keytransform__(UnitsContainer({"[length]": 1.0}), UnitsContainer({"[time]": -1.0}))

        s = ["@context(n=1) longcontextname", "[length] <-> 1 / [time]: n * c / value"]

        c = Context.from_lines(s)
        self.assertEqual(c.defaults, {"n": 1})
        self.assertEqual(set(c.funcs.keys()), set((a, b)))
        self._test_ctx(c)

        s = ["@context(n=1, bla=2) longcontextname", "[length] <-> 1 / [time]: n * c / value / bla"]

        c = Context.from_lines(s)
        self.assertEqual(c.defaults, {"n": 1, "bla": 2})
        self.assertEqual(set(c.funcs.keys()), set((a, b)))

        # If the variable is not present in the definition, then raise an error
        s = ["@context(n=1) longcontextname", "[length] <-> 1 / [time]: c / value"]
        self.assertRaises(ValueError, Context.from_lines, s)
Ejemplo n.º 13
0
    def test_parse_define(self):
        a = Context.__keytransform__(UnitsContainer({"[time]": -1}),
                                     UnitsContainer({"[length]": 1.0}))
        b = Context.__keytransform__(UnitsContainer({"[length]": 1}),
                                     UnitsContainer({"[time]": -1.0}))

        s = ["@context longcontextname", "[length] <-> 1 / [time]: c / value"]
        c = Context.from_lines(s)
        self.assertEqual(c.defaults, {})
        self.assertEqual(c.funcs.keys(), {a, b})
        self._test_ctx(c)
Ejemplo n.º 14
0
    def test_parse_auto_inverse(self):

        a = Context.__keytransform__(UnitsContainer({'[time]': -1.}), UnitsContainer({'[length]': 1.}))
        b = Context.__keytransform__(UnitsContainer({'[length]': 1.}), UnitsContainer({'[time]': -1.}))

        s = ['@context longcontextname',
             '[length] <-> 1 / [time]: c / value']

        c = Context.from_lines(s)
        self.assertEqual(c.defaults, {})
        self.assertEqual(set(c.funcs.keys()), set((a, b)))
        self._test_ctx(c)
Ejemplo n.º 15
0
    def test_parse_auto_inverse(self):

        a = Context.__keytransform__(UnitsContainer({"[time]": -1.0}),
                                     UnitsContainer({"[length]": 1.0}))
        b = Context.__keytransform__(UnitsContainer({"[length]": 1.0}),
                                     UnitsContainer({"[time]": -1.0}))

        s = ["@context longcontextname", "[length] <-> 1 / [time]: c / value"]

        c = Context.from_lines(s)
        assert c.defaults == {}
        assert c.funcs.keys() == {a, b}
        self._test_ctx(c)
Ejemplo n.º 16
0
    def test_parse_parameterized(self):
        a = Context.__keytransform__(UnitsContainer({'[time]': -1.}), UnitsContainer({'[length]': 1.}))
        b = Context.__keytransform__(UnitsContainer({'[length]': 1.}), UnitsContainer({'[time]': -1.}))

        s = ['@context(n=1) longcontextname',
             '[length] <-> 1 / [time]: n * c / value']

        c = Context.from_lines(s)
        self.assertEqual(c.defaults, {'n': 1})
        self.assertEqual(set(c.funcs.keys()), set((a, b)))
        self._test_ctx(c)

        # If the variable is not present in the definition, then raise an error
        s = ['@context(n=1) longcontextname',
             '[length] <-> 1 / [time]: c / value']
        self.assertRaises(ValueError, Context.from_lines, s)
Ejemplo n.º 17
0
 def test_parse_invalid(self, badrow):
     with pytest.raises(DefinitionSyntaxError):
         Context.from_lines(["@context c", badrow])
Ejemplo n.º 18
0
def test_err_to_base_unit():
    expected = "Can't define base units within a context"
    with pytest.raises(DefinitionSyntaxError, match=expected):
        Context.from_lines(["@context c", "x = [d]"])
Ejemplo n.º 19
0
def test_err_prefix_redefinition():
    expected = re.escape(
        "Expected <unit> = <converter>; got [d1] = [d2] * [d3]")
    with pytest.raises(DefinitionSyntaxError, match=expected):
        Context.from_lines(["@context c", "[d1] = [d2] * [d3]"])
Ejemplo n.º 20
0
def test_err_redefine_alias(subtests):
    expected = "Can't change a unit's symbol or aliases within a context"
    for s in ("foo = bar = f", "foo = bar = _ = baz"):
        with subtests.test(s):
            with pytest.raises(DefinitionSyntaxError, match=expected):
                Context.from_lines(["@context c", s])
Ejemplo n.º 21
0
 def test_err_to_base_unit(self):
     with self.assertRaises(DefinitionSyntaxError) as e:
         Context.from_lines(["@context c", "x = [d]"])
     self.assertEqual(str(e.exception),
                      "Can't define base units within a context")
Ejemplo n.º 22
0
 def test_err_prefix_redefinition(self):
     with self.assertRaises(DefinitionSyntaxError) as e:
         Context.from_lines(["@context c", "[d1] = [d2] * [d3]"])
     self.assertEqual(
         str(e.exception),
         "Expected <unit> = <converter>; got [d1] = [d2] * [d3]")