From 9929a77b0050bcea562696d38481a39202a8afee Mon Sep 17 00:00:00 2001 From: maxluli Date: Thu, 1 Jun 2023 11:21:29 +0200 Subject: [PATCH] Now the LapTimes and Gaps are tested better and the Gaps detection has been improved to make it pass --- TrackTrends/DriverGapToLeaderWindow.cs | 2 +- TrackTrends/Window.cs | 4 ++++ TrackTrendsTests/OcrImageTests.cs | 19 ++++++++++-------- .../Gaps/{42_181.png => 47_181.png} | Bin 4 files changed, 16 insertions(+), 9 deletions(-) rename TrackTrendsTests/TestImages/Gaps/{42_181.png => 47_181.png} (100%) diff --git a/TrackTrends/DriverGapToLeaderWindow.cs b/TrackTrends/DriverGapToLeaderWindow.cs index b76a46b..77f6504 100644 --- a/TrackTrends/DriverGapToLeaderWindow.cs +++ b/TrackTrends/DriverGapToLeaderWindow.cs @@ -13,7 +13,7 @@ using System.Threading.Tasks; namespace TrackTrends { - internal class DriverGapToLeaderWindow:Window + public class DriverGapToLeaderWindow:Window { public DriverGapToLeaderWindow(Bitmap image, Rectangle bounds, bool generateEngine = true) : base(image, bounds,generateEngine) { diff --git a/TrackTrends/Window.cs b/TrackTrends/Window.cs index d34945b..2d29458 100644 --- a/TrackTrends/Window.cs +++ b/TrackTrends/Window.cs @@ -529,6 +529,10 @@ namespace TrackTrends // This should be the x:xx.xxx try { + //Gaps cant be more than 9 minuts so if there is more than 1 digit it means that the '+' has been understood as an other number + if (rawNumbers[0].Length > 1) + rawNumbers[0] = rawNumbers[0][rawNumbers[0].Length - 1].ToString(); + minuts = Convert.ToInt32(rawNumbers[0].ToString()); seconds = Convert.ToInt32(rawNumbers[1].ToString()); miliseconds = Convert.ToInt32(rawNumbers[2].ToString()); diff --git a/TrackTrendsTests/OcrImageTests.cs b/TrackTrendsTests/OcrImageTests.cs index 345f63b..605a1ea 100644 --- a/TrackTrendsTests/OcrImageTests.cs +++ b/TrackTrendsTests/OcrImageTests.cs @@ -31,9 +31,11 @@ namespace TrackTrends.Tests string[] checkDigits = fileName.Split('_'); string[] digitsToCheck = time.Split(':'); - Assert.AreEqual(checkDigits.Length, digitsToCheck.Length); + //The ConvertMSToTime will always return three chars so we need to make the checkDigits be also three chars + while (checkDigits.Length != 3) + checkDigits = new[] { "0" }.Concat(checkDigits).ToArray(); - for(int i = 0; i < checkDigits.Length; i++) + for (int i = 0; i < checkDigits.Length; i++) { Assert.AreEqual(checkDigits[i], digitsToCheck[i]); } @@ -51,12 +53,12 @@ namespace TrackTrends.Tests foreach (string file in Directory.GetFiles(directory)) { Bitmap image = (Bitmap)Image.FromFile(file); - DriverLapTimeWindow lapTimeWindow = new DriverLapTimeWindow(image, new Rectangle(0, 0, image.Width, image.Height), true); + DriverGapToLeaderWindow gapsWindow = new DriverGapToLeaderWindow(image, new Rectangle(0, 0, image.Width, image.Height), true); string[] paths = file.Split('/'); string fileName = paths[paths.Length - 1]; fileName = fileName.Replace(".png", ""); - int timeMS = (int)lapTimeWindow.DecodePng(); + int timeMS = (int)gapsWindow.DecodePng(); string time = Reader.ConvertMsToTime(timeMS); string[] checkDigits = fileName.Split('_'); @@ -68,13 +70,14 @@ namespace TrackTrends.Tests } else { - Assert.AreEqual(checkDigits.Length, digitsToCheck.Length); + //The ConvertMSToTime will always return three chars so we need to make the checkDigits be also three chars + while(checkDigits.Length != 3) + checkDigits = new[] { "0" }.Concat(checkDigits).ToArray(); for (int i = 0; i < checkDigits.Length; i++) { - if (checkDigits[i] != digitsToCheck[i]) - Console.Write("wut?"); - Assert.AreEqual(checkDigits[i], digitsToCheck[i]); + //We need to convert to int first because sometimes we have "08" and "8" and in string its not the same but in int it is + Assert.AreEqual(Convert.ToInt32(checkDigits[i]), Convert.ToInt32(digitsToCheck[i])); } } } diff --git a/TrackTrendsTests/TestImages/Gaps/42_181.png b/TrackTrendsTests/TestImages/Gaps/47_181.png similarity index 100% rename from TrackTrendsTests/TestImages/Gaps/42_181.png rename to TrackTrendsTests/TestImages/Gaps/47_181.png