• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

SMTorg / smt-optim / 28686583443

03 Jul 2026 10:47PM UTC coverage: 79.757% (-7.4%) from 87.112%
28686583443

Pull #13

github

web-flow
Merge 9d44a36d2 into f08badaa8
Pull Request #13: Feat/multi objective

294 of 760 new or added lines in 13 files covered. (38.68%)

79 existing lines in 5 files now uncovered.

3944 of 4945 relevant lines covered (79.76%)

1.6 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

98.48
/src/tests/test_unit/test_console_logger.py
1
import unittest
2✔
2
from io import StringIO
2✔
3
from unittest.mock import patch
2✔
4

5

6
# --- Minimal stubs ---
7
class DummySample:
2✔
8
    def __init__(self, obj):
2✔
9
        self.obj = obj
2✔
10
        self.metadata = {
2✔
11
            "rscv": 1.0e-5,
12
        }
13

14

15
class DummyProblem:
2✔
16
    def __init__(self):
2✔
17
        self.num_obj = 1
2✔
18

19

20
class DummyState:
2✔
21
    def __init__(self, iter_, budget):
2✔
22
        self.iter = iter_
2✔
23
        self.budget = budget
2✔
24
        self.problem = DummyProblem()
2✔
25
        self.iter_log = {
2✔
26
            "fidelity": 2,
27
            "gp_training_time": 0.123,
28
            "acq_opt_time": 0.456,
29
        }
30

31
    def get_best_sample(self, ctol):
2✔
32
        return DummySample([1.2345])
2✔
33

34

35
class DummyConfig:
2✔
36
    pass
2✔
37

38

39
# --- Tests ---
40
class TestConsoleLogger(unittest.TestCase):
2✔
41
    def setUp(self):
2✔
42
        from smt_optim.utils.logger import ConsoleLogger
2✔
43

44
        self.logger = ConsoleLogger(DummyConfig())
2✔
45
        self.state = DummyState(iter_=0, budget=1.0)
2✔
46

47
    @patch("sys.stdout", new_callable=StringIO)
2✔
48
    def test_header_printed_on_first_iteration(self, mock_stdout):
2✔
49
        self.logger.on_iter_end(self.state)
2✔
50

51
        output = mock_stdout.getvalue().strip().split("\n")
2✔
52

53
        # First line should be header
54
        self.assertIn("iter", output[0])
2✔
55
        self.assertIn("budget", output[0])
2✔
56

57
        # Second line should be data row
58
        self.assertEqual(len(output), 2)
2✔
59

60
    @patch("sys.stdout", new_callable=StringIO)
2✔
61
    def test_no_header_before_repeat(self, mock_stdout):
2✔
62
        # First call prints header
63
        self.logger.on_iter_end(self.state)
2✔
64

65
        # Reset capture
66
        mock_stdout.truncate(0)
2✔
67
        mock_stdout.seek(0)
2✔
68

69
        # Next call should NOT print header
70
        self.state.iter = 1
2✔
71
        self.logger.on_iter_end(self.state)
2✔
72

73
        output = mock_stdout.getvalue().strip().split("\n")
2✔
74

75
        self.assertEqual(len(output), 1)  # only row, no header
2✔
76

77
    @patch("sys.stdout", new_callable=StringIO)
2✔
78
    def test_header_repeats(self, mock_stdout):
2✔
79
        # Force repeat condition
80
        self.logger.iter = self.logger.repeat_header
2✔
81

82
        self.logger.on_iter_end(self.state)
2✔
83

84
        output = mock_stdout.getvalue().strip().split("\n")
2✔
85

86
        self.assertEqual(len(output), 2)
2✔
87
        self.assertIn("iter", output[0])  # header present
2✔
88

89
    @patch("sys.stdout", new_callable=StringIO)
2✔
90
    def test_row_formatting(self, mock_stdout):
2✔
91
        self.logger.on_iter_end(self.state)
2✔
92

93
        output = mock_stdout.getvalue().strip().split("\n")
2✔
94
        row = output[1]
2✔
95

96
        # Check formatted values (string-level assertions)
97
        self.assertIn("0", row)  # iter
2✔
98
        self.assertIn("1.000", row)  # budget (.3f)
2✔
99
        self.assertIn("1.23450e+00", row)  # fmin (.5e)
2✔
100
        self.assertIn("1.000e-05", row)  # fmin (.5e)
2✔
101
        self.assertIn("2", row)  # fidelity
2✔
102

103
    def test_iteration_counter_increments(self):
2✔
104
        self.assertEqual(self.logger.iter, 0)
2✔
105

106
        self.logger.on_iter_end(self.state)
2✔
107
        self.assertEqual(self.logger.iter, 1)
2✔
108

109
        self.logger.on_iter_end(self.state)
2✔
110
        self.assertEqual(self.logger.iter, 2)
2✔
111

112

113
if __name__ == "__main__":
2✔
UNCOV
114
    unittest.main()
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc