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

MissionEngineeringLtd / MissionEngineeringToolbox / 23876242339

01 Apr 2026 11:41PM UTC coverage: 70.933% (+1.2%) from 69.736%
23876242339

push

github

MissionEngineeringLtd
#2: Fixed test.

104 of 166 branches covered (62.65%)

Branch coverage included in aggregate %.

1 of 4 new or added lines in 1 file covered. (25.0%)

10 existing lines in 3 files now uncovered.

1326 of 1850 relevant lines covered (71.68%)

1687.61 hits per line

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

96.2
/MissionEngineering.Simulation/Source/Simulation.cs
1
using MissionEngineering.Core;
2
using MissionEngineering.DataRecorder;
3
using MissionEngineering.Math;
4
using MissionEngineering.Platform;
5

6
namespace MissionEngineering.Simulation;
7

8
public class Simulation : ISimulation
9
{
10
    public SimulationSettings SimulationSettings { get; set; }
7✔
11

12
    public ScenarioSettings ScenarioSettings { get; set; }
49✔
13

14
    public IDateTimeOrigin DateTimeOrigin { get; set; }
5✔
15

16
    public ILLAOrigin LLAOrigin { get; set; }
5✔
17

18
    public List<IExecutableModel> SimulationModels { get; set; }
1,908✔
19

20
    public IDataRecorder DataRecorder { get; set; }
16✔
21

22
    private double nextDisplayTime;
23

24
    private int displayCount;
25

26
    public Simulation(SimulationSettings simulationSettings, ScenarioSettings scenarioSettings, IDateTimeOrigin dateTimeOrigin, ILLAOrigin llaOrigin, IDataRecorder dataRecorder)
2✔
27
    {
2✔
28
        SimulationSettings = simulationSettings;
2✔
29
        ScenarioSettings = scenarioSettings;
2✔
30
        DateTimeOrigin = dateTimeOrigin;
2✔
31
        LLAOrigin = llaOrigin;
2✔
32
        DataRecorder = dataRecorder;
2✔
33
    }
2✔
34

35
    public void Run()
36
    {
1✔
37
        LogUtilities.LogInformation("***");
1✔
38
        LogUtilities.LogInformation($"Run Number {SimulationSettings.RunNumber} Started...");
1✔
39
        LogUtilities.LogInformation("");
1✔
40

41
        var clockSettings = ScenarioSettings.SimulationClockSettings;
1✔
42

43
        var time = clockSettings.TimeStart;
1✔
44

45
        Initialise(time);
1✔
46

47
        RunSimulation(time);
1✔
48

49
        Finalise(time);
1✔
50

51
        LogUtilities.LogInformation($"Run Number {SimulationSettings.RunNumber} Finished.");
1✔
52
        LogUtilities.LogInformation("***");
1✔
53
        LogUtilities.LogInformation("");
1✔
54

55
        CreateZipFile(false, true);
1✔
56
    }
1✔
57

58
    public void Initialise(double time)
59
    {
1✔
60
        LogUtilities.LogInformation("Initialise Started...");
1✔
61
        LogUtilities.LogInformation("");
1✔
62

63
        DateTimeOrigin.DateTimeStart = ScenarioSettings.SimulationClockSettings.DateTimeOrigin;
1✔
64

65
        LLAOrigin.PositionLLA = ScenarioSettings.LLAOrigin;
1✔
66

67
        DataRecorder.SimulationData.ScenarioSettings = ScenarioSettings;
1✔
68

69
        SimulationModels = [];
1✔
70

71
        foreach (var platformSettings in ScenarioSettings.PlatformSettingsList)
7✔
72
        {
2✔
73
            var platformModel = new Platform.Platform(DateTimeOrigin, LLAOrigin)
2✔
74
            {
2✔
75
                PlatformSettings = platformSettings
2✔
76
            };
2✔
77

78
            SimulationModels.Add(platformModel);
2✔
79
        }
2✔
80

81
        InitialiseModels(time);
1✔
82

83
        DataRecorder.Initialise(time);
1✔
84

85
        var simulationSettingsString = SimulationSettings.ConvertToJsonString();
1✔
86
        var scenarioSettingsString = ScenarioSettings.ConvertToJsonString();
1✔
87

88
        nextDisplayTime = ScenarioSettings.SimulationClockSettings.TimeStart;
1✔
89

90
        LogUtilities.LogInformation($"Simulation Settings {Environment.NewLine} {simulationSettingsString}");
1✔
91
        LogUtilities.LogInformation($"Scenario Settings {Environment.NewLine} {scenarioSettingsString}");
1✔
92

93
        LogUtilities.LogInformation("Initialise Finished.");
1✔
94
        LogUtilities.LogInformation("");
1✔
95
    }
1✔
96

97
    public void RunSimulation(double time)
98
    {
1✔
99
        var clockSettings = ScenarioSettings.SimulationClockSettings;
1✔
100

101
        LogUtilities.LogInformation("Run Started...");
1✔
102
        LogUtilities.LogInformation("");
1✔
103

104
        while (time <= clockSettings.TimeEnd)
1,902✔
105
        {
1,901✔
106
            ShowProgress(time);
1,901✔
107

108
            Update(time);
1,901✔
109

110
            time += clockSettings.TimeStep;
1,901✔
111
        }
1,901✔
112

113
        LogUtilities.LogInformation("");
1✔
114
        LogUtilities.LogInformation("Run Finished.");
1✔
115
        LogUtilities.LogInformation("");
1✔
116
    }
1✔
117

118
    public void Update(double time)
119
    {
1,901✔
120
        UpdateModels(time);
1,901✔
121
    }
1,901✔
122

123
    public void Finalise(double time)
124
    {
1✔
125
        LogUtilities.LogInformation("Finalise Started...");
1✔
126
        LogUtilities.LogInformation("");
1✔
127

128
        FinaliseModels(time);
1✔
129

130
        var platformDataAll = GeneratePlatformDataAll();
1✔
131

132
        DataRecorder.SimulationData.PlatformDataAll = platformDataAll;
1✔
133

134
        DataRecorder.Finalise(time);
1✔
135

136
        CreateZipFile(true, false);
1✔
137

138
        LogUtilities.LogInformation("");
1✔
139
        LogUtilities.LogInformation("Finalise Finished.");
1✔
140
        LogUtilities.LogInformation("");
1✔
141
    }
1✔
142

143
    public void ShowProgress(double time)
144
    {
1,901✔
145
        var isDisplayTime = (time >= nextDisplayTime);
1,901✔
146

147
        if (isDisplayTime)
1,901✔
148
        {
38✔
149
            LogUtilities.LogInformation($"Time = {nextDisplayTime:000}s");
38✔
150

151
            displayCount++;
38✔
152
            nextDisplayTime = ScenarioSettings.SimulationClockSettings.TimeStart + displayCount * 5.0;
38✔
153
        }
38✔
154
    }
1,901✔
155

156
    public void InitialiseModels(double time)
157
    {
1✔
158
        foreach (var model in SimulationModels)
7✔
159
        {
2✔
160
            model.Initialise(time);
2✔
161
        }
2✔
162
    }
1✔
163

164
    public void UpdateModels(double time)
165
    {
1,901✔
166
        foreach (var model in SimulationModels)
13,307✔
167
        {
3,802✔
168
            model.Update(time);
3,802✔
169
        }
3,802✔
170
    }
1,901✔
171

172
    public void FinaliseModels(double time)
173
    {
1✔
174
        foreach (var model in SimulationModels)
7✔
175
        {
2✔
176
            model.Finalise(time);
2✔
177
        }
2✔
178
    }
1✔
179

180
    public List<PlatformData> GeneratePlatformDataAll()
181
    {
1✔
182
        var platformDataAll = new List<PlatformData>();
1✔
183

184
        foreach (var model in SimulationModels)
7✔
185
        {
2✔
186
            platformDataAll.AddRange(((Platform.Platform)model).PlatformDataList);
2✔
187
        }
2✔
188

189
        return platformDataAll;
1✔
190
    }
1✔
191

192
    public void CreateZipFile(bool isWriteToLog, bool isWriteData)
193
    {
2✔
194
        if (!DataRecorder.SimulationData.SimulationSettings.IsWriteData)
2!
195
        {
×
196
            return;
×
197
        }
198

199
        if (!DataRecorder.SimulationData.SimulationSettings.IsCreateZipFile)
2!
UNCOV
200
        {
×
UNCOV
201
            return;
×
202
        }
203

204
        var zipFileName = $"{DataRecorder.SimulationData.SimulationSettings.SimulationName}.zip";
2✔
205

206
        var zipFileNameFull = DataRecorder.SimulationData.SimulationSettings.GetFileNameFull(zipFileName);
2✔
207

208
        if (isWriteToLog)
2✔
209
        {
1✔
210
            LogUtilities.LogInformation($"Writing     Zip  File : {zipFileNameFull}");
1✔
211
        }
1✔
212

213
        if (isWriteData)
2✔
214
        {
1✔
215
            LogUtilities.CloseLog();
1✔
216

217
            ZipUtilities.ZipDirectory(DataRecorder.SimulationData.SimulationSettings.OutputFolder, zipFileNameFull);
1✔
218
        }
1✔
219
    }
2✔
220
}
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