Skip to content

Commit

Permalink
Add nullability to all projects
Browse files Browse the repository at this point in the history
Also refactored ValueNote to take into account pitch nullability.
  • Loading branch information
ChainsManipulator committed Feb 26, 2024
1 parent 98f4580 commit 1d56585
Show file tree
Hide file tree
Showing 14 changed files with 80 additions and 52 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
Expand Down
24 changes: 12 additions & 12 deletions Libiada.Core.Tests/Core/CongenericScoreTrackTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,10 @@ public void ValueNoteOrderFirstTest()
new ValueNote(new Pitch(3, NoteSymbol.D, Accidental.Bekar), new Duration(1, 4, false), false, Tie.None, 2),
new ValueNote(new Pitch(3, NoteSymbol.A, Accidental.DoubleSharp), new Duration(1, 16, false), false, Tie.None, 3),
new ValueNote(new Pitch(3, NoteSymbol.C, Accidental.Sharp), new Duration(1, 4, false), false, Tie.None, 1),
new ValueNote((Pitch)null, new Duration(1, 4, false), false, Tie.None, 1),
new ValueNote((Pitch)null, new Duration(1, 4, false), false, Tie.None, 1),
new ValueNote((Pitch)null, new Duration(1, 16, false), false, Tie.None, 1),
new ValueNote((Pitch)null, new Duration(1, 16, false), false, Tie.None, 1)
new ValueNote( new Duration(1, 4, false), false, Tie.None, 1),
new ValueNote(new Duration(1, 4, false), false, Tie.None, 1),
new ValueNote(new Duration(1, 16, false), false, Tie.None, 1),
new ValueNote(new Duration(1, 16, false), false, Tie.None, 1)
};

var attr = new MeasureAttributes(new Size(4, 4), new Key(5));
Expand Down Expand Up @@ -118,10 +118,10 @@ public void ValueNoteOrderSecondTest()
new ValueNote(new Pitch(3, NoteSymbol.D, Accidental.Bekar), new Duration(1, 4, false), false, Tie.None, 2),
new ValueNote(new Pitch(3, NoteSymbol.A, Accidental.DoubleSharp), new Duration(1, 16, false), false, Tie.None, 3),
new ValueNote(new Pitch(3, NoteSymbol.C, Accidental.Sharp), new Duration(1, 4, false), false, Tie.None, 1),
new ValueNote((Pitch)null, new Duration(1, 4, false), false, Tie.None, 1),
new ValueNote((Pitch)null, new Duration(1, 4, false), false, Tie.None, 1),
new ValueNote((Pitch)null, new Duration(1, 16, false), false, Tie.None, 1),
new ValueNote((Pitch)null, new Duration(1, 16, false), false, Tie.None, 1)
new ValueNote(new Duration(1, 4, false), false, Tie.None, 1),
new ValueNote(new Duration(1, 4, false), false, Tie.None, 1),
new ValueNote(new Duration(1, 16, false), false, Tie.None, 1),
new ValueNote(new Duration(1, 16, false), false, Tie.None, 1)
};

var attr = new MeasureAttributes(new Size(4, 4), new Key(5));
Expand Down Expand Up @@ -207,14 +207,14 @@ public void MeasureOrderTest()

var notes5 = new List<ValueNote>
{
new ValueNote((Pitch)null, new Duration(1, 4, false), false, Tie.None, 1),
new ValueNote((Pitch)null, new Duration(1, 4, false), false, Tie.None, 1)
new ValueNote(new Duration(1, 4, false), false, Tie.None, 1),
new ValueNote(new Duration(1, 4, false), false, Tie.None, 1)
};

var notes6 = new List<ValueNote>
{
new ValueNote((Pitch)null, new Duration(1, 16, false), false, Tie.None, 1),
new ValueNote((Pitch)null, new Duration(1, 16, false), false, Tie.None, 1)
new ValueNote(new Duration(1, 16, false), false, Tie.None, 1),
new ValueNote(new Duration(1, 16, false), false, Tie.None, 1)
};

var attr = new MeasureAttributes(new Size(4, 4), new Key(5));
Expand Down
40 changes: 20 additions & 20 deletions Libiada.Core.Tests/Core/SimpleTypes/FmotifTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,9 @@ public void FmotifWithoutPausesFirstTest()
// проверка работы метода, который возвращает копию объекта (Fmotif), только без пауз.
var fmotif = new Fmotif(FmotifType.CompleteMinimalMeasure, PauseTreatment.Ignore, 0);
fmotif.NoteList.Add(new ValueNote(new Pitch(1, NoteSymbol.A, Accidental.Bekar), new Duration(1, 2, false), false, Tie.None));
fmotif.NoteList.Add(new ValueNote((Pitch)null, new Duration(1, 4, false), false, Tie.None));
fmotif.NoteList.Add(new ValueNote(new Duration(1, 4, false), false, Tie.None));
fmotif.NoteList.Add(new ValueNote(new Pitch(1, NoteSymbol.A, Accidental.Bekar), new Duration(1, 2, false), false, Tie.None));
fmotif.NoteList.Add(new ValueNote((Pitch)null, new Duration(1, 4, false), false, Tie.None));
fmotif.NoteList.Add(new ValueNote(new Duration(1, 4, false), false, Tie.None));
fmotif.NoteList.Add(new ValueNote(new Pitch(1, NoteSymbol.A, Accidental.Bekar), new Duration(1, 2, false), false, Tie.None));
Assert.AreEqual(fmotif.PauseTreatmentProcedure(PauseTreatment.Ignore).NoteList[0].Pitches[0].Step, NoteSymbol.A);
Assert.AreEqual(fmotif.PauseTreatmentProcedure(PauseTreatment.Ignore).NoteList[1].Pitches[0].Step, NoteSymbol.A);
Expand All @@ -72,11 +72,11 @@ public void FmotifWithoutPausesSecondTest()
{
// проверка работы метода, который возвращает копию объекта (Fmotif), только без пауз.
var fmotif = new Fmotif(FmotifType.CompleteMinimalMeasure, PauseTreatment.Ignore, 0);
fmotif.NoteList.Add(new ValueNote((Pitch)null, new Duration(1, 4, false), false, Tie.None));
fmotif.NoteList.Add(new ValueNote((Pitch)null, new Duration(1, 4, false), false, Tie.None));
fmotif.NoteList.Add(new ValueNote(new Duration(1, 4, false), false, Tie.None));
fmotif.NoteList.Add(new ValueNote(new Duration(1, 4, false), false, Tie.None));
fmotif.NoteList.Add(new ValueNote(new Pitch(1, NoteSymbol.A, Accidental.Bekar), new Duration(1, 2, false), false, Tie.None));
fmotif.NoteList.Add(new ValueNote(new Pitch(1, NoteSymbol.A, Accidental.Bekar), new Duration(1, 2, false), false, Tie.None));
fmotif.NoteList.Add(new ValueNote((Pitch)null, new Duration(1, 4, false), false, Tie.None));
fmotif.NoteList.Add(new ValueNote(new Duration(1, 4, false), false, Tie.None));
fmotif.NoteList.Add(new ValueNote(new Pitch(1, NoteSymbol.A, Accidental.Bekar), new Duration(1, 2, false), false, Tie.None));
Assert.AreEqual(fmotif.PauseTreatmentProcedure(PauseTreatment.Ignore).NoteList[0].Pitches[0].Step, NoteSymbol.A);
Assert.AreEqual(fmotif.PauseTreatmentProcedure(PauseTreatment.Ignore).NoteList[1].Pitches[0].Step, NoteSymbol.A);
Expand All @@ -92,12 +92,12 @@ public void FmotifTieGatheredFirstTest()
{
// проверка работы метода, который возвращает копию объекта (Fmotif), c собранными залигованными нотами.
var fmotif = new Fmotif(FmotifType.CompleteMinimalMeasure, PauseTreatment.Ignore, 0);
fmotif.NoteList.Add(new ValueNote((Pitch)null, new Duration(1, 2, false), false, Tie.None, 0));
fmotif.NoteList.Add(new ValueNote(new Duration(1, 2, false), false, Tie.None, 0));
fmotif.NoteList.Add(new ValueNote(new Pitch(1, NoteSymbol.A, Accidental.Bekar), new Duration(1, 8, false), false, Tie.Start, 2));
fmotif.NoteList.Add(new ValueNote(new Pitch(1, NoteSymbol.A, Accidental.Bekar), new Duration(1, 8, false), false, Tie.Continue, 4));
fmotif.NoteList.Add(new ValueNote(new Pitch(1, NoteSymbol.A, Accidental.Bekar), new Duration(1, 8, false), false, Tie.Continue, 3));
fmotif.NoteList.Add(new ValueNote(new Pitch(1, NoteSymbol.A, Accidental.Bekar), new Duration(1, 8, false), false, Tie.End, 1));
fmotif.NoteList.Add(new ValueNote((Pitch)null, new Duration(1, 4, false), false, Tie.None, 3));
fmotif.NoteList.Add(new ValueNote(new Duration(1, 4, false), false, Tie.None, 3));
fmotif.NoteList.Add(new ValueNote(new Pitch(1, NoteSymbol.A, Accidental.Bekar), new Duration(1, 2, false), false, Tie.None, 4));

Assert.AreEqual(4, fmotif.TieGathered().NoteList.Count);
Expand All @@ -114,12 +114,12 @@ public void FmotifTieGatheredSecondTest()
{
// проверка работы метода, который возвращает копию объекта (Fmotif), c собранными залигованными нотами.
var fmotif = new Fmotif(FmotifType.CompleteMinimalMeasure, PauseTreatment.Ignore, 0);
fmotif.NoteList.Add(new ValueNote((Pitch)null, new Duration(1, 2, false), false, Tie.None, 0));
fmotif.NoteList.Add(new ValueNote(new Duration(1, 2, false), false, Tie.None, 0));
fmotif.NoteList.Add(new ValueNote(new Pitch(1, NoteSymbol.A, Accidental.Bekar), new Duration(1, 8, 2, 3, false), false, Tie.Start, 2));
fmotif.NoteList.Add(new ValueNote(new Pitch(1, NoteSymbol.A, Accidental.Bekar), new Duration(1, 8, 2, 3, false), false, Tie.Continue, 4));
fmotif.NoteList.Add(new ValueNote(new Pitch(1, NoteSymbol.A, Accidental.Bekar), new Duration(1, 8, 2, 3, false), false, Tie.Continue, 3));
fmotif.NoteList.Add(new ValueNote(new Pitch(1, NoteSymbol.A, Accidental.Bekar), new Duration(1, 8, false), false, Tie.End, 1));
fmotif.NoteList.Add(new ValueNote((Pitch)null, new Duration(1, 4, false), false, Tie.None, 3));
fmotif.NoteList.Add(new ValueNote(new Duration(1, 4, false), false, Tie.None, 3));
fmotif.NoteList.Add(new ValueNote(new Pitch(1, NoteSymbol.A, Accidental.Bekar), new Duration(1, 2, false), false, Tie.None, 4));

Assert.AreEqual(4, fmotif.TieGathered().NoteList.Count);
Expand Down Expand Up @@ -232,23 +232,23 @@ public void FmotifEqualsFirstTest()
var fmotif2 = new Fmotif(FmotifType.CompleteMinimalMeasure, PauseTreatment.Ignore, 0);
var fmotif3 = new Fmotif(FmotifType.CompleteMinimalMeasure, PauseTreatment.Ignore, 0);

fmotif1.NoteList.Add(new ValueNote((Pitch)null, new Duration(1, 2, false), false, Tie.None, 0));
fmotif1.NoteList.Add(new ValueNote(new Duration(1, 2, false), false, Tie.None, 0));
fmotif1.NoteList.Add(new ValueNote(new Pitch(1, NoteSymbol.A, Accidental.Bekar), new Duration(1, 8, false), false, Tie.Start, 2));
fmotif1.NoteList.Add(new ValueNote(new Pitch(1, NoteSymbol.A, Accidental.Bekar), new Duration(1, 8, false), false, Tie.Continue, 4));
fmotif1.NoteList.Add(new ValueNote(new Pitch(1, NoteSymbol.A, Accidental.Bekar), new Duration(1, 8, false), false, Tie.Continue, 3));
fmotif1.NoteList.Add(new ValueNote(new Pitch(1, NoteSymbol.A, Accidental.Bekar), new Duration(1, 8, false), false, Tie.End, 1));
fmotif1.NoteList.Add(new ValueNote((Pitch)null, new Duration(1, 4, false), false, Tie.None, 3));
fmotif1.NoteList.Add(new ValueNote(new Duration(1, 4, false), false, Tie.None, 3));
fmotif1.NoteList.Add(new ValueNote(new Pitch(1, NoteSymbol.A, Accidental.Bekar), new Duration(1, 2, false), false, Tie.None, 4));

fmotif2.NoteList.Add(new ValueNote((Pitch)null, new Duration(1, 4, false), false, Tie.None, 0));
fmotif2.NoteList.Add(new ValueNote((Pitch)null, new Duration(1, 4, false), false, Tie.None, 0));
fmotif2.NoteList.Add(new ValueNote(new Duration(1, 4, false), false, Tie.None, 0));
fmotif2.NoteList.Add(new ValueNote(new Duration(1, 4, false), false, Tie.None, 0));
fmotif2.NoteList.Add(new ValueNote(new Pitch(1, NoteSymbol.A, Accidental.Bekar), new Duration(1, 2, false), false, Tie.None, 1));
fmotif2.NoteList.Add(new ValueNote((Pitch)null, new Duration(1, 4, false), false, Tie.None, 3));
fmotif2.NoteList.Add(new ValueNote(new Duration(1, 4, false), false, Tie.None, 3));
fmotif2.NoteList.Add(new ValueNote(new Pitch(1, NoteSymbol.A, Accidental.Bekar), new Duration(1, 2, false), false, Tie.None, 4));

fmotif3.NoteList.Add(new ValueNote((Pitch)null, new Duration(1, 4, false), false, Tie.None, 0));
fmotif3.NoteList.Add(new ValueNote(new Duration(1, 4, false), false, Tie.None, 0));
fmotif3.NoteList.Add(new ValueNote(new Pitch(1, NoteSymbol.B, Accidental.Bekar), new Duration(1, 2, false), false, Tie.None, 1));
fmotif3.NoteList.Add(new ValueNote((Pitch)null, new Duration(1, 4, false), false, Tie.None, 3));
fmotif3.NoteList.Add(new ValueNote(new Duration(1, 4, false), false, Tie.None, 3));
fmotif3.NoteList.Add(new ValueNote(new Pitch(1, NoteSymbol.A, Accidental.DoubleSharp), new Duration(1, 2, false), false, Tie.None, 4));

Assert.IsTrue(fmotif1.Equals(fmotif2));
Expand All @@ -269,12 +269,12 @@ public void FmotifEqualsFirstTest()
public void FmotifEqualsSecondTest()
{
var fmotif = new Fmotif(FmotifType.CompleteMinimalMeasure, PauseTreatment.Ignore, 0);
fmotif.NoteList.Add(new ValueNote((Pitch)null, new Duration(1, 2, false), false, Tie.None, 0));
fmotif.NoteList.Add(new ValueNote(new Duration(1, 2, false), false, Tie.None, 0));
fmotif.NoteList.Add(new ValueNote(new Pitch(1, NoteSymbol.A, Accidental.Bekar), new Duration(1, 8, 2, 3, false), false, Tie.Start, 2));
fmotif.NoteList.Add(new ValueNote(new Pitch(1, NoteSymbol.A, Accidental.Bekar), new Duration(1, 8, 2, 3, false), false, Tie.Continue, 4));
fmotif.NoteList.Add(new ValueNote(new Pitch(1, NoteSymbol.A, Accidental.Bekar), new Duration(1, 8, 2, 3, false), false, Tie.Continue, 3));
fmotif.NoteList.Add(new ValueNote(new Pitch(1, NoteSymbol.A, Accidental.Bekar), new Duration(1, 8, false), false, Tie.End, 1));
fmotif.NoteList.Add(new ValueNote((Pitch)null, new Duration(1, 4, false), false, Tie.None, 3));
fmotif.NoteList.Add(new ValueNote(new Duration(1, 4, false), false, Tie.None, 3));
fmotif.NoteList.Add(new ValueNote(new Pitch(1, NoteSymbol.A, Accidental.Bekar), new Duration(1, 2, false), false, Tie.None, 4));

Assert.IsTrue(fmotif.Equals(fmotif));
Expand All @@ -287,12 +287,12 @@ public void FmotifEqualsSecondTest()
public void FmotifEqualsThirdTest()
{
var fmotif = new Fmotif(FmotifType.CompleteMinimalMeasure, PauseTreatment.Ignore, 0);
fmotif.NoteList.Add(new ValueNote((Pitch)null, new Duration(1, 2, false), false, Tie.None, 0));
fmotif.NoteList.Add(new ValueNote(new Duration(1, 2, false), false, Tie.None, 0));
fmotif.NoteList.Add(new ValueNote(new Pitch(2, NoteSymbol.A, Accidental.Bekar), new Duration(1, 8, 2, 3, false), false, Tie.Start, 2));
fmotif.NoteList.Add(new ValueNote(new Pitch(2, NoteSymbol.A, Accidental.Bekar), new Duration(1, 8, 2, 3, false), false, Tie.Continue, 4));
fmotif.NoteList.Add(new ValueNote(new Pitch(2, NoteSymbol.A, Accidental.Bekar), new Duration(1, 8, 2, 3, false), false, Tie.Continue, 3));
fmotif.NoteList.Add(new ValueNote(new Pitch(2, NoteSymbol.A, Accidental.Bekar), new Duration(1, 8, false), false, Tie.End, 1));
fmotif.NoteList.Add(new ValueNote((Pitch)null, new Duration(1, 4, false), false, Tie.None, 3));
fmotif.NoteList.Add(new ValueNote(new Duration(1, 4, false), false, Tie.None, 3));
fmotif.NoteList.Add(new ValueNote(new Pitch(2, NoteSymbol.A, Accidental.Bekar), new Duration(1, 2, false), false, Tie.None, 4));

var fmotif1 = new Fmotif(FmotifType.CompleteMinimalMeasure, PauseTreatment.Ignore, 0);
Expand Down
1 change: 1 addition & 0 deletions Libiada.Core.Tests/Libiada.Core.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
Expand Down
12 changes: 6 additions & 6 deletions Libiada.Core.Tests/Music/FmotifDividerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -336,7 +336,7 @@ public void FmotifDividerSeventhTest()
// создание и заполнения списка(ов) нот для такта(ов) монотрека
var notes = new List<ValueNote>
{
new ValueNote((Pitch)null, new Duration(1, 4, false), false, Tie.None, 0),
new ValueNote(new Duration(1, 4, false), false, Tie.None, 0),
new ValueNote(new Pitch(3, NoteSymbol.A, 0), new Duration(1, 8, false), false, Tie.None, 1),
new ValueNote(new Pitch(3, NoteSymbol.B, 0), new Duration(1, 8, false), false, Tie.None, 2)
};
Expand All @@ -360,7 +360,7 @@ public void FmotifDividerSeventhTest()
// создание аналогов ф-мотивов, которые должны получиться, после разбиения
// процедура определения одинаковых на данном этапе не производится
var fmotif1 = new Fmotif(FmotifType.CompleteMinimalMeasure, PauseTreatment.Ignore, 0);
fmotif1.NoteList.Add(new ValueNote((Pitch)null, new Duration(1, 4, false), false, Tie.None));
fmotif1.NoteList.Add(new ValueNote(new Duration(1, 4, false), false, Tie.None));
fmotif1.NoteList.Add(new ValueNote(new Pitch(3, NoteSymbol.A, 0), new Duration(1, 8, false), false, Tie.None));
fmotif1.NoteList.Add(new ValueNote(new Pitch(3, NoteSymbol.B, 0), new Duration(1, 8, false), false, Tie.None));

Expand All @@ -382,7 +382,7 @@ public void FmotifDividerEighthTest()
{
new ValueNote(new Pitch(3, NoteSymbol.A, 0), new Duration(1, 8, false), false, Tie.None, 0),
new ValueNote(new Pitch(3, NoteSymbol.B, 0), new Duration(1, 8, false), false, Tie.None, 2),
new ValueNote((Pitch)null, new Duration(1, 8, false), false, Tie.None, 1),
new ValueNote(new Duration(1, 8, false), false, Tie.None, 1),
new ValueNote(new Pitch(3, NoteSymbol.B, 0), new Duration(1, 8, false), false, Tie.None, 2)
};

Expand All @@ -406,7 +406,7 @@ public void FmotifDividerEighthTest()
// процедура определения одинаковых на данном этапе не производится
var fmotif1 = new Fmotif(FmotifType.CompleteMinimalMeasure, PauseTreatment.Ignore, 0);
fmotif1.NoteList.Add(new ValueNote(new Pitch(3, NoteSymbol.A, 0), new Duration(1, 8, false), false, Tie.None));
fmotif1.NoteList.Add(new ValueNote((Pitch)null, new Duration(1, 8, false), false, Tie.None));
fmotif1.NoteList.Add(new ValueNote(new Duration(1, 8, false), false, Tie.None));
fmotif1.NoteList.Add(new ValueNote(new Pitch(3, NoteSymbol.B, 0), new Duration(1, 8, false), false, Tie.None));
fmotif1.NoteList.Add(new ValueNote(new Pitch(3, NoteSymbol.B, 0), new Duration(1, 8, false), false, Tie.None));

Expand All @@ -427,7 +427,7 @@ public void FmotifDividerPauseSilenceTest()
var notes = new List<ValueNote>
{
new ValueNote(new Pitch(3, NoteSymbol.A, 0), new Duration(1, 8, false), false, Tie.None, 0),
new ValueNote((Pitch)null, new Duration(1, 8, false), false, Tie.None, 2),
new ValueNote(new Duration(1, 8, false), false, Tie.None, 2),
new ValueNote(new Pitch(3, NoteSymbol.B, 0), new Duration(1, 8, false), false, Tie.None, 1),
new ValueNote(new Pitch(3, NoteSymbol.B, 0), new Duration(1, 8, false), false, Tie.None, 2)
};
Expand All @@ -452,7 +452,7 @@ public void FmotifDividerPauseSilenceTest()
// процедура определения одинаковых на данном этапе не производится
var fmotif1 = new Fmotif(FmotifType.CompleteMinimalMeasure, PauseTreatment.Ignore, 0);
fmotif1.NoteList.Add(new ValueNote(new Pitch(3, NoteSymbol.A, 0), new Duration(1, 8, false), false, Tie.None));
fmotif1.NoteList.Add(new ValueNote((Pitch)null, new Duration(1, 8, false), false, Tie.None));
fmotif1.NoteList.Add(new ValueNote(new Duration(1, 8, false), false, Tie.None));
var fmotif2 = new Fmotif(FmotifType.CompleteMinimalMeasure, PauseTreatment.Ignore, 1);
fmotif2.NoteList.Add(new ValueNote(new Pitch(3, NoteSymbol.B, 0), new Duration(1, 8, false), false, Tie.None));
fmotif2.NoteList.Add(new ValueNote(new Pitch(3, NoteSymbol.B, 0), new Duration(1, 8, false), false, Tie.None));
Expand Down
2 changes: 1 addition & 1 deletion Libiada.Core.Tests/Music/MusicXml/MusicXmlParserTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public void MusicXmlParserSetUp()
new ValueNote(new Pitch(3, NoteSymbol.A, 0), new Duration(1, 16, false), false, Tie.None),
new ValueNote(new Pitch(4, NoteSymbol.D, 0), new Duration(1, 8, true), false, Tie.None),
new ValueNote(new Pitch(4, NoteSymbol.C, 0), new Duration(1, 8, true), false, Tie.None),
new ValueNote((Pitch)null, new Duration(1, 8, false), false, Tie.None)
new ValueNote(new Duration(1, 8, false), false, Tie.None)
};
var notes4 = new List<ValueNote>
{
Expand Down
Loading

0 comments on commit 1d56585

Please sign in to comment.