Coverage for tests/test_metrics.py: 22%
57 statements
« prev ^ index » next coverage.py v6.5.0, created at 2022-10-14 01:59 -0700
« prev ^ index » next coverage.py v6.5.0, created at 2022-10-14 01:59 -0700
1# This file is part of verify.
2#
3# Developed for the LSST Data Management System.
4# This product includes software developed by the LSST Project
5# (https://www.lsst.org).
6# See the COPYRIGHT file at the top-level directory of this distribution
7# for details of code ownership.
8#
9# This program is free software: you can redistribute it and/or modify
10# it under the terms of the GNU General Public License as published by
11# the Free Software Foundation, either version 3 of the License, or
12# (at your option) any later version.
13#
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17# GNU General Public License for more details.
18#
19# You should have received a copy of the GNU General Public License
20# along with this program. If not, see <https://www.gnu.org/licenses/>.
22import os
23import unittest
25import yaml
26import astropy.units as u
28from lsst.verify import Metric
31class MetricTestCase(unittest.TestCase):
32 """Test Metrics and metrics.yaml functionality."""
34 def setUp(self):
35 yaml_path = os.path.join(os.path.dirname(__file__),
36 'data', 'metrics', 'testing.yaml')
37 with open(yaml_path) as f:
38 self.metric_doc = yaml.safe_load(f)
40 def test_load_all_yaml_metrics(self):
41 """Verify that all metrics from testing.yaml can be loaded."""
42 for metric_name in self.metric_doc:
43 m = Metric.deserialize(metric_name, **self.metric_doc[metric_name])
44 self.assertIsInstance(m, Metric)
46 def test_reference_string(self):
47 """Verify reference property for different reference datasets."""
48 m1 = Metric('test', 'test', '', reference_url='example.com',
49 reference_doc='Doc', reference_page=1)
50 self.assertEqual(m1.reference, 'Doc, p. 1, example.com')
52 m2 = Metric('test', 'test', '', reference_url='example.com')
53 self.assertEqual(m2.reference, 'example.com')
55 m3 = Metric('test', 'test', '', reference_url='example.com',
56 reference_doc='Doc')
57 self.assertEqual(m3.reference, 'Doc, example.com')
59 m4 = Metric('test', 'test', '', reference_doc='Doc', reference_page=1)
60 self.assertEqual(m4.reference, 'Doc, p. 1')
62 m4 = Metric('test', 'test', '', reference_doc='Doc')
63 self.assertEqual(m4.reference, 'Doc')
65 def test_json(self):
66 """Simple test of the serialized JSON content of a metric."""
67 name = 'T1'
68 description = 'Test'
69 unit = u.mag
70 reference_doc = 'TEST-1'
71 reference_page = 1
72 reference_url = 'example.com'
73 m = Metric(name, description, unit,
74 tags=['tagA', 'tagB'],
75 reference_doc=reference_doc,
76 reference_url=reference_url,
77 reference_page=reference_page)
79 j = m.json
80 self.assertEqual(j['name'], name)
81 self.assertEqual(j['description'], description)
82 self.assertEqual(j['unit'], unit)
83 self.assertEqual(j['reference']['doc'], reference_doc)
84 self.assertEqual(j['reference']['page'], reference_page)
85 self.assertEqual(j['reference']['url'], reference_url)
86 self.assertIn('tagA', j['tags'])
87 self.assertIn('tagB', j['tags'])
88 self.assertNotIn('tagC', j['tags'])
90 # rebuild from json
91 m2 = Metric.deserialize(**j)
92 self.assertEqual(m, m2)
94 def test_str(self):
95 m1 = Metric('test', 'test docs', 'arcsec', reference_url='example.com',
96 reference_doc='Doc', reference_page=1)
97 self.assertEqual(str(m1), 'test (arcsec): test docs')
99 m2 = Metric('test2', 'some words', '')
100 self.assertEqual(
101 str(m2),
102 'test2 (dimensionless_unscaled): some words')
104 def test_check_unit(self):
105 m = Metric('test', '', 'marcsec')
106 self.assertTrue(m.check_unit(5. * u.arcsec))
107 self.assertTrue(m.check_unit(5. * u.marcsec))
108 self.assertFalse(m.check_unit(5. * u.mag))
111if __name__ == "__main__": 111 ↛ 112line 111 didn't jump to line 112, because the condition on line 111 was never true
112 unittest.main()