Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions SemiPlot/SemiPlot.Core/Data/PenCatalogue.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ public sealed record StoredPen(
string? Color,
PenLineStyle LineStyle,
bool EnabledOnStart,
double? ScaleMin,
double? ScaleMax);
double? ScaleMinOnStart,
double? ScaleMaxOnStart);

/// <summary>One <c>semiplot_groups</c> row and the ids of its member pens, in ascending order.</summary>
public sealed record StoredGroup(int Id, string Name, IReadOnlyList<int> MemberPenIds);
2 changes: 1 addition & 1 deletion SemiPlot/SemiPlot.Core/Data/PenSettingChange.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,5 @@ public sealed record LineStyle(PenLineStyle Value) : PenSettingChange;

public sealed record EnabledOnStart(bool Value) : PenSettingChange;

public sealed record Scale(double? Min, double? Max) : PenSettingChange;
public sealed record ScaleOnStart(double? Min, double? Max) : PenSettingChange;
}
12 changes: 6 additions & 6 deletions SemiPlot/SemiPlot.Core/Trends/Pen.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ public sealed record Pen(
string? Unit = null,
string? Format = null,
bool EnabledOnStart = true,
double? ScaleMin = null,
double? ScaleMax = null,
double? ScaleMinOnStart = null,
double? ScaleMaxOnStart = null,
PenLineStyle LineStyle = PenLineStyle.Interpolated)
{
/// <summary>Compares <see cref="Groups"/> element by element, so two reads of one stored pen are equal.</summary>
Expand All @@ -23,8 +23,8 @@ public bool Equals(Pen? other)
&& string.Equals(Unit, other.Unit, StringComparison.Ordinal)
&& string.Equals(Format, other.Format, StringComparison.Ordinal)
&& EnabledOnStart == other.EnabledOnStart
&& Nullable.Equals(ScaleMin, other.ScaleMin)
&& Nullable.Equals(ScaleMax, other.ScaleMax)
&& Nullable.Equals(ScaleMinOnStart, other.ScaleMinOnStart)
&& Nullable.Equals(ScaleMaxOnStart, other.ScaleMaxOnStart)
&& LineStyle == other.LineStyle;
}

Expand All @@ -44,8 +44,8 @@ public override int GetHashCode()
hash.Add(Unit, StringComparer.Ordinal);
hash.Add(Format, StringComparer.Ordinal);
hash.Add(EnabledOnStart);
hash.Add(ScaleMin);
hash.Add(ScaleMax);
hash.Add(ScaleMinOnStart);
hash.Add(ScaleMaxOnStart);
hash.Add(LineStyle);

return hash.ToHashCode();
Expand Down
2 changes: 1 addition & 1 deletion SemiPlot/SemiPlot.Core/Trends/PenScaleSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public static PenScaleSettings InitialFor(Pen pen)
{
var settings = new PenScaleSettings(pen.PenId);

if (pen.ScaleMin is { } min && pen.ScaleMax is { } max)
if (pen.ScaleMinOnStart is { } min && pen.ScaleMaxOnStart is { } max)
{
settings = settings with { Mode = ScaleMode.Manual, ManualMin = min, ManualMax = max };
}
Expand Down
18 changes: 10 additions & 8 deletions SemiPlot/SemiPlot.DataSource.Postgres/ArchiveStatements.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
namespace SemiPlot.DataSource.Postgres;

/// <summary>
/// The column order of <see cref="ArchiveStatements.PenCatalog"/> and, up to <see cref="ScaleMax"/>, of
/// The column order of <see cref="ArchiveStatements.PenCatalog"/> and, up to <see cref="ScaleMaxOnStart"/>, of
/// <see cref="ArchiveStatements.StoredPens"/>, named so a transposition shows.
/// </summary>
internal static class PenCatalogColumn
Expand All @@ -13,8 +13,8 @@ internal static class PenCatalogColumn
public const int Color = 4;
public const int LineStyle = 5;
public const int EnabledOnStart = 6;
public const int ScaleMin = 7;
public const int ScaleMax = 8;
public const int ScaleMinOnStart = 7;
public const int ScaleMaxOnStart = 8;
public const int Groups = 9;
}

Expand Down Expand Up @@ -65,7 +65,7 @@ internal static class ArchiveStatements
/// </summary>
public const string StoredPens = """
SELECT id, name, unit, format, color, line_style, enabled_on_start,
scale_min, scale_max
scale_min_on_start, scale_max_on_start
FROM semiplot_tags
ORDER BY id;
""";
Expand Down Expand Up @@ -99,9 +99,11 @@ GROUP BY grp.id
/// <summary>
/// Both bounds in one statement: <c>semiplot_tags_scale_paired</c> refuses a half-set pair between two.
/// </summary>
public const string UpdatePenScale = """
UPDATE semiplot_tags SET scale_min = @min, scale_max = @max WHERE id = @id;
""";
public const string UpdatePenScaleOnStart = """
UPDATE semiplot_tags
SET scale_min_on_start = @min, scale_max_on_start = @max
WHERE id = @id;
""";

public const string CreateGroup = "INSERT INTO semiplot_groups (name) VALUES (@name) RETURNING id;";

Expand Down Expand Up @@ -129,7 +131,7 @@ DELETE FROM semiplot_pen_groups
/// </summary>
public const string PenCatalog = """
SELECT tag.id, tag.name, tag.unit, tag.format, tag.color, tag.line_style,
tag.enabled_on_start, tag.scale_min, tag.scale_max,
tag.enabled_on_start, tag.scale_min_on_start, tag.scale_max_on_start,
coalesce(array_agg(grp.name ORDER BY grp.name)
FILTER (WHERE grp.name IS NOT NULL), '{}') AS groups
FROM semiplot_tags tag
Expand Down
4 changes: 2 additions & 2 deletions SemiPlot/SemiPlot.DataSource.Postgres/PostgresDataProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -481,12 +481,12 @@ private Pen ReadPen(NpgsqlDataReader reader)
// installation without the constraint: it autoscales rather than opening on a bound with no partner.
private static (double? Min, double? Max) ReadScalePair(NpgsqlDataReader reader)
{
if (reader.IsDBNull(PenCatalogColumn.ScaleMin) || reader.IsDBNull(PenCatalogColumn.ScaleMax))
if (reader.IsDBNull(PenCatalogColumn.ScaleMinOnStart) || reader.IsDBNull(PenCatalogColumn.ScaleMaxOnStart))
{
return (null, null);
}

return (reader.GetDouble(PenCatalogColumn.ScaleMin), reader.GetDouble(PenCatalogColumn.ScaleMax));
return (reader.GetDouble(PenCatalogColumn.ScaleMinOnStart), reader.GetDouble(PenCatalogColumn.ScaleMaxOnStart));
}

// The server validates a stored colour against the hex pattern, so only its absence is handled here.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,8 @@ PenSettingChange.LineStyle lineStyle
=> Value(ArchiveStatements.UpdatePenLineStyle, NpgsqlDbType.Smallint, (short)lineStyle.Value),
PenSettingChange.EnabledOnStart enabledOnStart
=> Value(ArchiveStatements.UpdatePenEnabledOnStart, NpgsqlDbType.Boolean, enabledOnStart.Value),
PenSettingChange.Scale scale => (ArchiveStatements.UpdatePenScale, ScaleParameters(scale)),
PenSettingChange.ScaleOnStart scale
=> (ArchiveStatements.UpdatePenScaleOnStart, ScaleOnStartParameters(scale)),
_ => throw new ArgumentOutOfRangeException(nameof(change), change, "Unknown pen setting change.")
};
}
Expand All @@ -179,7 +180,7 @@ private static (string Statement, NpgsqlParameter[] Parameters) Value(
return (statement, [new NpgsqlParameter("value", type) { Value = value }]);
}

private static NpgsqlParameter[] ScaleParameters(PenSettingChange.Scale scale)
private static NpgsqlParameter[] ScaleOnStartParameters(PenSettingChange.ScaleOnStart scale)
{
return
[
Expand Down Expand Up @@ -256,8 +257,8 @@ private StoredPen ReadStoredPen(NpgsqlDataReader reader)
ReadText(reader, PenCatalogColumn.Color),
StoredLineStyle.Read(storedLineStyle, penId, _logger, () => LogLevel.Warning),
reader.GetBoolean(PenCatalogColumn.EnabledOnStart),
ReadBound(reader, PenCatalogColumn.ScaleMin),
ReadBound(reader, PenCatalogColumn.ScaleMax));
ReadBound(reader, PenCatalogColumn.ScaleMinOnStart),
ReadBound(reader, PenCatalogColumn.ScaleMaxOnStart));
}

private static string? ReadText(NpgsqlDataReader reader, int ordinal)
Expand Down
14 changes: 7 additions & 7 deletions SemiPlot/SemiPlot.Tests.Integration/PenCatalogueEditorTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ public async Task ReadReturnsANullColourAsNullAndAnUnusableMaskAsItIsStored()
[InlineData(nameof(PenSettingChange.Color))]
[InlineData(nameof(PenSettingChange.LineStyle))]
[InlineData(nameof(PenSettingChange.EnabledOnStart))]
[InlineData(nameof(PenSettingChange.Scale))]
[InlineData(nameof(PenSettingChange.ScaleOnStart))]
public async Task EachChangeWritesItsOwnColumnAndNothingElse(string arm)
{
using var services = Build();
Expand Down Expand Up @@ -151,12 +151,12 @@ public async Task TheScalePairWritesBothBoundsInOneStatement()
var editor = Editor(services);
var pen = await PenAsync(editor, UncommissionedId);

var set = await editor.ChangeAsync(pen, new PenSettingChange.Scale(-5, 5));
var set = await editor.ChangeAsync(pen, new PenSettingChange.ScaleOnStart(-5, 5));

set.IsSuccess.Should().BeTrue(ArchiveReadSupport.Describe(set));
(await PenAsync(editor, UncommissionedId)).Should().Be(pen with { ScaleMin = -5, ScaleMax = 5 });
(await PenAsync(editor, UncommissionedId)).Should().Be(pen with { ScaleMinOnStart = -5, ScaleMaxOnStart = 5 });

var cleared = await editor.ChangeAsync(pen, new PenSettingChange.Scale(null, null));
var cleared = await editor.ChangeAsync(pen, new PenSettingChange.ScaleOnStart(null, null));

cleared.IsSuccess.Should().BeTrue(ArchiveReadSupport.Describe(cleared));
(await PenAsync(editor, UncommissionedId)).Should().Be(pen);
Expand All @@ -173,7 +173,7 @@ public async Task AScalePairTheServerRefusesIsARejectedValueNamingThePen(double?
var editor = Editor(services);
var pen = await PenAsync(editor, ChamberPressureId);

var result = await editor.ChangeAsync(pen, new PenSettingChange.Scale(min, max));
var result = await editor.ChangeAsync(pen, new PenSettingChange.ScaleOnStart(min, max));

FailureOf(result).Should().Be((ArchiveFault.ValueRejected, "Chamber pressure"));
(await PenAsync(editor, ChamberPressureId)).Should().Be(pen);
Expand Down Expand Up @@ -422,8 +422,8 @@ private static (PenSettingChange Change, StoredPen Expected) Arm(string arm, Sto
pen with { LineStyle = PenLineStyle.Stepped }),
nameof(PenSettingChange.EnabledOnStart)
=> (new PenSettingChange.EnabledOnStart(false), pen with { EnabledOnStart = false }),
nameof(PenSettingChange.Scale)
=> (new PenSettingChange.Scale(-1, 1), pen with { ScaleMin = -1, ScaleMax = 1 }),
nameof(PenSettingChange.ScaleOnStart)
=> (new PenSettingChange.ScaleOnStart(-1, 1), pen with { ScaleMinOnStart = -1, ScaleMaxOnStart = 1 }),
_ => throw new ArgumentOutOfRangeException(nameof(arm), arm, "Unknown change arm.")
};
}
Expand Down
4 changes: 2 additions & 2 deletions SemiPlot/SemiPlot.Tests.Integration/PenRegistrationTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,8 @@ public async Task AKeyWithNoPenBecomesAHiddenDefaultPenNamedByItsNumber()
added.Color.Should().BeOneOf(_registrationColors);
added.Unit.Should().BeNull();
added.Format.Should().BeNull();
added.ScaleMin.Should().BeNull();
added.ScaleMax.Should().BeNull();
added.ScaleMinOnStart.Should().BeNull();
added.ScaleMaxOnStart.Should().BeNull();
pens.Select(pen => pen.Id).Should().Equal(_unregisteredPenIds.Prepend(RegisteredPenId));
}

Expand Down
12 changes: 6 additions & 6 deletions SemiPlot/SemiPlot.Tests.Integration/PostgresCatalogReadTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,8 @@ public async Task SeededCatalogueCarriesTheCommissionedFieldsOfEachPen()

commissioned.Unit.Should().Be("degC");
commissioned.Format.Should().Be("0.0");
commissioned.ScaleMin.Should().Be(20.0);
commissioned.ScaleMax.Should().Be(850.0);
commissioned.ScaleMinOnStart.Should().Be(20.0);
commissioned.ScaleMaxOnStart.Should().Be(850.0);
commissioned.EnabledOnStart.Should().BeTrue();

Single(result.Value, SyntheticPenCatalog.HiddenOnStartPenId).EnabledOnStart.Should().BeFalse();
Expand Down Expand Up @@ -147,8 +147,8 @@ public async Task APenInNoGroupReadsAsAnEmptyGroupList()
var uncommissioned = Single(result.Value, SyntheticPenCatalog.UncommissionedPenId);

uncommissioned.Groups.Should().BeEmpty();
uncommissioned.ScaleMin.Should().BeNull();
uncommissioned.ScaleMax.Should().BeNull();
uncommissioned.ScaleMinOnStart.Should().BeNull();
uncommissioned.ScaleMaxOnStart.Should().BeNull();
}

[Fact]
Expand Down Expand Up @@ -289,8 +289,8 @@ private static Pen ToPen(SyntheticPen pen)
pen.Unit,
pen.Format,
pen.EnabledOnStart,
pen.ScaleMin,
pen.ScaleMax,
pen.ScaleMinOnStart,
pen.ScaleMaxOnStart,
pen.LineStyle);
}

Expand Down
6 changes: 4 additions & 2 deletions SemiPlot/SemiPlot.Tests.Integration/TagCatalogWriterTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ FROM public.semiplot_pen_groups membership
""";

private const string StoredScalesCommand =
"SELECT id, scale_min, scale_max FROM public.semiplot_tags ORDER BY id;";
"SELECT id, scale_min_on_start, scale_max_on_start FROM public.semiplot_tags ORDER BY id;";

[Fact]
public async Task TheGroupTableHoldsEveryGroupTheSliceNames()
Expand Down Expand Up @@ -60,7 +60,9 @@ public async Task TheStoredScalePairIsTheSyntheticPensOwnBounds()

written.Should().Equal(
[
.. Slice().Select(pen => (pen.PenId, pen.ScaleMin, pen.ScaleMax)).OrderBy(scale => scale.PenId)
.. Slice()
.Select(pen => (pen.PenId, pen.ScaleMinOnStart, pen.ScaleMaxOnStart))
.OrderBy(scale => scale.PenId)
]);
written.Should().Contain(scale => scale.PenId == SyntheticPenCatalog.UncommissionedPenId
&& scale.Min == null
Expand Down
14 changes: 7 additions & 7 deletions SemiPlot/SemiPlot.Tests.Unit/Core/Trends/PenListDeltaTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ public sealed class PenListDeltaTests
"Pa",
"0.0",
EnabledOnStart: true,
ScaleMin: 0,
ScaleMax: 100);
ScaleMinOnStart: 0,
ScaleMaxOnStart: 100);

private static readonly Pen _heater = new(2, "Heater", ["Heaters"], "#223344", "degC");

Expand All @@ -36,8 +36,8 @@ public sealed class PenListDeltaTests
nameof(Pen.Unit),
nameof(Pen.Format),
nameof(Pen.EnabledOnStart),
nameof(Pen.ScaleMin),
nameof(Pen.ScaleMax),
nameof(Pen.ScaleMinOnStart),
nameof(Pen.ScaleMaxOnStart),
nameof(Pen.LineStyle)
];

Expand Down Expand Up @@ -96,7 +96,7 @@ public void AColourChange_GivesOneRevisionAndNoSetChange()
[InlineData(null, null)]
public void AStoredScaleChange_GivesARevision(double? scaleMin, double? scaleMax)
{
var rescaled = _pressure with { ScaleMin = scaleMin, ScaleMax = scaleMax };
var rescaled = _pressure with { ScaleMinOnStart = scaleMin, ScaleMaxOnStart = scaleMax };

var delta = PenListDelta.Between([_pressure], [rescaled]);

Expand Down Expand Up @@ -196,8 +196,8 @@ private static Pen WithOneMemberChanged(Pen pen, string member)
nameof(Pen.Unit) => pen with { Unit = "kPa" },
nameof(Pen.Format) => pen with { Format = "0.000" },
nameof(Pen.EnabledOnStart) => pen with { EnabledOnStart = !pen.EnabledOnStart },
nameof(Pen.ScaleMin) => pen with { ScaleMin = -5.0 },
nameof(Pen.ScaleMax) => pen with { ScaleMax = 500.0 },
nameof(Pen.ScaleMinOnStart) => pen with { ScaleMinOnStart = -5.0 },
nameof(Pen.ScaleMaxOnStart) => pen with { ScaleMaxOnStart = 500.0 },
nameof(Pen.LineStyle) => pen with { LineStyle = PenLineStyle.Stepped },
_ => throw new ArgumentOutOfRangeException(nameof(member), member, "No change is defined for it.")
};
Expand Down
4 changes: 2 additions & 2 deletions SemiPlot/SemiPlot.Tests.Unit/RawLayerGeneratorTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -217,8 +217,8 @@ public void TheStandardSliceCarriesTheThreeCommissioningStates()
uncommissioned.Groups.Should().BeEmpty();
uncommissioned.Unit.Should().BeNull();
uncommissioned.Format.Should().BeNull();
uncommissioned.ScaleMin.Should().BeNull();
uncommissioned.ScaleMax.Should().BeNull();
uncommissioned.ScaleMinOnStart.Should().BeNull();
uncommissioned.ScaleMaxOnStart.Should().BeNull();
}

[Fact]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -351,7 +351,8 @@ public void Autoscale_ActsOnTheActivePenAndCloses()
public void InitialScale_ActsOnTheActivePenAndCloses()
{
var (chart, _, _, provider) = CreateViewModel();
chart.ApplyCatalogue([.. provider.Pens.Select(pen => pen with { ScaleMin = 5.0, ScaleMax = 50.0 })]);
chart.ApplyCatalogue(
[.. provider.Pens.Select(pen => pen with { ScaleMinOnStart = 5.0, ScaleMaxOnStart = 50.0 })]);
chart.SetAxisLimits(1, 10.0, 90.0);
chart.SetAxisLimits(2, 20.0, 80.0);
chart.SetActivePen(2);
Expand All @@ -373,7 +374,8 @@ public void InitialScale_ActsOnTheActivePenAndCloses()
public void WhenThePenIsNoLongerDrawn_ThePanelClosesAndEveryCommandWritesNothing(PanelPenLeaves leaves)
{
var (chart, _, _, provider) = CreateViewModel();
chart.ApplyCatalogue([.. provider.Pens.Select(pen => pen with { ScaleMin = 5.0, ScaleMax = 50.0 })]);
chart.ApplyCatalogue(
[.. provider.Pens.Select(pen => pen with { ScaleMinOnStart = 5.0, ScaleMaxOnStart = 50.0 })]);
chart.SetAxisLimits(1, 10.0, 90.0);
chart.SetAxisLimits(2, 20.0, 80.0);
chart.SetActivePen(2);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ public void TheInitialScaleButton_RestoresTheStoredPairAndClosesThePanel()
{
using var viewModel = CreateLoadedViewModel();
var pen = new Pen(1, "Pen 1", ["Group A"], "#ff0000");
viewModel.ApplyCatalogue([pen with { ScaleMin = 5.0, ScaleMax = 50.0 }]);
viewModel.ApplyCatalogue([pen with { ScaleMinOnStart = 5.0, ScaleMaxOnStart = 50.0 }]);
viewModel.SetAxisLimits(1, 10.0, 90.0);
using var shown = ShowChart(viewModel);
var (flyout, panel) = OpenPanel(viewModel, shown);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,10 @@ public void ARevisedStoredScale_LeavesTheShownPenAlone()
var autoSettings = viewModel.ScaleSettings[2];

viewModel.ApplyCatalogue(
[catalogue[0] with { ScaleMin = 0.0, ScaleMax = 50.0 }, catalogue[1] with { ScaleMin = 5.0, ScaleMax = 6.0 }]);
[
catalogue[0] with { ScaleMinOnStart = 0.0, ScaleMaxOnStart = 50.0 },
catalogue[1] with { ScaleMinOnStart = 5.0, ScaleMaxOnStart = 6.0 }
]);

viewModel.ScaleSettings[1].Mode.Should().Be(ScaleMode.Manual);
viewModel.ScaleRangeForPen(1)!.Value.Should().Be((10.0, 90.0));
Expand All @@ -115,7 +118,7 @@ public void APenTheCatalogueAdds_TakesItsStoredPair()
var catalogue = provider.Pens;
viewModel.ApplyCatalogue([catalogue[0]]);

viewModel.ApplyCatalogue([catalogue[0], catalogue[1] with { ScaleMin = 20.0, ScaleMax = 80.0 }]);
viewModel.ApplyCatalogue([catalogue[0], catalogue[1] with { ScaleMinOnStart = 20.0, ScaleMaxOnStart = 80.0 }]);

var settings = viewModel.ScaleSettings[2];
settings.Mode.Should().Be(ScaleMode.Manual);
Expand Down
Loading
Loading