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

SMTorg / smt-optim / 28806559135

06 Jul 2026 04:23PM UTC coverage: 87.169% (+0.6%) from 86.529%
28806559135

push

github

web-flow
  Fix: Resolve RSCV constraint bug, correct variance margins for relaxation, and fix CI Coveralls (#21)

109 of 110 new or added lines in 4 files covered. (99.09%)

360 existing lines in 43 files now uncovered.

3757 of 4310 relevant lines covered (87.17%)

1.74 hits per line

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

98.39
/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 DummyState:
2✔
16
    def __init__(self, iter_, budget):
2✔
17
        self.iter = iter_
2✔
18
        self.budget = budget
2✔
19
        self.iter_log = {
2✔
20
            "fidelity": 2,
21
            "gp_training_time": 0.123,
22
            "acq_opt_time": 0.456,
23
        }
24

25
    def get_best_sample(self, ctol):
2✔
26
        return DummySample([1.2345])
2✔
27

28

29
class DummyConfig:
2✔
30
    pass
2✔
31

32

33
# --- Tests ---
34
class TestConsoleLogger(unittest.TestCase):
2✔
35

36
    def setUp(self):
2✔
37
        from smt_optim.utils.logger import ConsoleLogger
2✔
38

39
        self.logger = ConsoleLogger(DummyConfig())
2✔
40
        self.state = DummyState(iter_=0, budget=1.0)
2✔
41

42
    @patch("sys.stdout", new_callable=StringIO)
2✔
43
    def test_header_printed_on_first_iteration(self, mock_stdout):
2✔
44
        self.logger.on_iter_end(self.state)
2✔
45

46
        output = mock_stdout.getvalue().strip().split("\n")
2✔
47

48
        # First line should be header
49
        self.assertIn("iter", output[0])
2✔
50
        self.assertIn("budget", output[0])
2✔
51

52
        # Second line should be data row
53
        self.assertEqual(len(output), 2)
2✔
54

55
    @patch("sys.stdout", new_callable=StringIO)
2✔
56
    def test_no_header_before_repeat(self, mock_stdout):
2✔
57
        # First call prints header
58
        self.logger.on_iter_end(self.state)
2✔
59

60
        # Reset capture
61
        mock_stdout.truncate(0)
2✔
62
        mock_stdout.seek(0)
2✔
63

64
        # Next call should NOT print header
65
        self.state.iter = 1
2✔
66
        self.logger.on_iter_end(self.state)
2✔
67

68
        output = mock_stdout.getvalue().strip().split("\n")
2✔
69

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

72
    @patch("sys.stdout", new_callable=StringIO)
2✔
73
    def test_header_repeats(self, mock_stdout):
2✔
74
        # Force repeat condition
75
        self.logger.iter = self.logger.repeat_header
2✔
76

77
        self.logger.on_iter_end(self.state)
2✔
78

79
        output = mock_stdout.getvalue().strip().split("\n")
2✔
80

81
        self.assertEqual(len(output), 2)
2✔
82
        self.assertIn("iter", output[0])  # header present
2✔
83

84
    @patch("sys.stdout", new_callable=StringIO)
2✔
85
    def test_row_formatting(self, mock_stdout):
2✔
86
        self.logger.on_iter_end(self.state)
2✔
87

88
        output = mock_stdout.getvalue().strip().split("\n")
2✔
89
        row = output[1]
2✔
90

91
        # Check formatted values (string-level assertions)
92
        self.assertIn("0", row)              # iter
2✔
93
        self.assertIn("1.000", row)          # budget (.3f)
2✔
94
        self.assertIn("1.23450e+00", row)    # fmin (.5e)
2✔
95
        self.assertIn("1.000e-05", row)    # fmin (.5e)
2✔
96
        self.assertIn("2", row)              # fidelity
2✔
97

98
    def test_iteration_counter_increments(self):
2✔
99
        self.assertEqual(self.logger.iter, 0)
2✔
100

101
        self.logger.on_iter_end(self.state)
2✔
102
        self.assertEqual(self.logger.iter, 1)
2✔
103

104
        self.logger.on_iter_end(self.state)
2✔
105
        self.assertEqual(self.logger.iter, 2)
2✔
106

107

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

© 2026 Coveralls, Inc