< Summary

Information
Class: CustomStreamReaderTests.CustomStreamReaderTests
Assembly: customstreamreadertests.dll
File(s): C:\skola_karlovka\RP\code\csv-validator\CSV_Validator\Tests\CustomStreamReaderTests\CustomStreamReaderTests.cs
Line coverage
99%
Covered lines: 123
Uncovered lines: 1
Coverable lines: 124
Total lines: 450
Line coverage: 99.1%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

File(s)

C:\skola_karlovka\RP\code\csv-validator\CSV_Validator\Tests\CustomStreamReaderTests\CustomStreamReaderTests.cs

#LineLine coverage
 1using ValidateLib.Metadata.Descriptors;
 2using ValidateLib.TabularData.Parsing;
 3
 4namespace CustomStreamReaderTests
 5{
 6    public class CustomStreamReaderTests
 7    {
 8        public readonly string testFilesDirectory;
 19        public CustomStreamReaderTests()
 110        {
 111            testFilesDirectory = Path.Combine(GetProjectDirectory(), "TestFiles");
 12
 113        }
 14        static string GetProjectDirectory()
 115        {
 116            string? currentDirectory = Directory.GetCurrentDirectory();
 17
 118            while (!string.IsNullOrEmpty(currentDirectory))
 119            {
 120                string[] projectFiles = Directory.GetFiles(currentDirectory, "*.csproj");
 21
 122                if (projectFiles.Length > 0)
 123                    return currentDirectory;
 124                currentDirectory = Directory.GetParent(currentDirectory)?.FullName;
 125            }
 26
 027            throw new Exception("Could not find project directory.");
 28
 29
 130        }
 31
 32
 33        [Fact]
 34        public void TestOnlyReadCharOneByOne()
 135        {
 136            var testFilePath = Path.Combine(testFilesDirectory, "simple.txt");
 37            // Read the contents of the file into a string
 138            string fileContents = File.ReadAllText(testFilePath);
 39
 40            // Convert the string to a char array
 141            char[] expectedChars = fileContents.ToCharArray();
 42
 143            int buffersize = 6;
 144            int minCharsInBuffer = 3;
 45
 146            using (FileStream fs = new FileStream(testFilePath, FileMode.Open, FileAccess.Read))
 147            {
 148                CustomStreamReader csr = new CustomStreamReader(fs, buffersize, minCharsInBuffer);
 149                int index = 0;
 150                while (true)
 151                {
 152                    int nextSymbol = csr.ReadChar();
 153                    if (nextSymbol == -1) break;
 54
 155                    char nextChar = (char)nextSymbol;
 156                    Assert.Equal(expectedChars[index], nextChar);
 157                    index++;
 158                }
 59
 160            }
 161        }
 62
 63        [Fact]
 64        public void TestReadCharsAligned()
 165        {
 166            var testFilePath = Path.Combine(testFilesDirectory, "simple.txt");
 67            // Read the contents of the file into a string
 168            string fileContents = File.ReadAllText(testFilePath);
 69
 70            // Convert the string to a char array
 171            char[] expectedChars = fileContents.ToCharArray();
 72
 173            int buffersize = 6;
 174            int minCharsInBuffer = 3;
 175            int chunksToReadSize = 3;
 76
 177            using (FileStream fs = new FileStream(testFilePath, FileMode.Open, FileAccess.Read))
 178            {
 179                CustomStreamReader csr = new CustomStreamReader(fs, buffersize, minCharsInBuffer);
 180                int index = 0;
 181                while (true)
 182                {
 183                    char[] buffer = new char[chunksToReadSize];
 184                    int bytesRead = csr.ReadChars(chunksToReadSize, buffer);
 85
 186                    for (int i = 0; i < bytesRead; i++)
 187                    {
 188                        Assert.Equal(expectedChars[index * chunksToReadSize + i], buffer[i]);
 189                    }
 90
 191                    if (bytesRead < chunksToReadSize) break;
 192                    index++;
 193                }
 94
 195            }
 196        }
 97
 98        [Theory]
 99        [InlineData(5,2,2, "loremIpsum.txt")]
 100        [InlineData(5, 3, 10, "loremIpsum.txt")]
 101        [InlineData(5, 4, 7, "loremIpsum.txt")]
 102        [InlineData(6, 3, 10, "loremIpsum.txt")]
 103        [InlineData(6, 1, 3, "loremIpsum.txt")]
 104        [InlineData(6, 0, 7, "loremIpsum.txt")]
 105        [InlineData(7, 0, 21, "loremIpsum.txt")]
 106        [InlineData(7, 3, 23, "loremIpsum.txt")]
 107        [InlineData(7, 5, 25, "loremIpsum.txt")]
 108        [InlineData(8, 0, 4, "loremIpsum.txt")]
 109        [InlineData(8, 6, 23, "loremIpsum.txt")]
 110        [InlineData(8, 1, 24, "loremIpsum.txt")]
 111        [InlineData(9, 0, 100, "loremIpsum.txt")]
 112        [InlineData(9, 6, 17, "loremIpsum.txt")]
 113        [InlineData(9, 4, 19, "loremIpsum.txt")]
 114        [InlineData(10, 0, 99, "loremIpsum.txt")]
 115        [InlineData(10, 5, 61, "loremIpsum.txt")]
 116        [InlineData(10, 4, 63, "loremIpsum.txt")]
 117        [InlineData(10, 7, 50, "loremIpsum.txt")]
 118        [InlineData(11, 0, 15, "loremIpsum.txt")]
 119        [InlineData(11, 10, 20, "loremIpsum.txt")]
 120        [InlineData(11, 2, 28, "loremIpsum.txt")]
 121        [InlineData(12, 0, 18, "loremIpsum.txt")]
 122        [InlineData(12, 7, 17, "loremIpsum.txt")]
 123        [InlineData(12, 5, 5, "loremIpsum.txt")]
 124        [InlineData(13, 0, 7, "loremIpsum.txt")]
 125        [InlineData(13, 5, 4, "loremIpsum.txt")]
 126        [InlineData(13, 11, 18, "loremIpsum.txt")]
 127        [InlineData(13, 7, 27, "loremIpsum.txt")]
 128        [InlineData(14, 0, 13, "loremIpsum.txt")]
 129        [InlineData(14, 9, 11, "loremIpsum.txt")]
 130        [InlineData(14, 7, 3, "loremIpsum.txt")]
 131        [InlineData(5, 2, 2, "randomText.txt")]
 132        [InlineData(5, 3, 10, "randomText.txt")]
 133        [InlineData(5, 4, 7, "randomText.txt")]
 134        [InlineData(6, 3, 10, "randomText.txt")]
 135        [InlineData(6, 1, 3, "randomText.txt")]
 136        [InlineData(6, 0, 7, "randomText.txt")]
 137        [InlineData(7, 0, 21, "randomText.txt")]
 138        [InlineData(7, 3, 23, "randomText.txt")]
 139        [InlineData(7, 5, 25, "randomText.txt")]
 140        [InlineData(8, 0, 4, "randomText.txt")]
 141        [InlineData(8, 6, 23, "randomText.txt")]
 142        [InlineData(8, 1, 24, "randomText.txt")]
 143        [InlineData(9, 0, 100, "randomText.txt")]
 144        [InlineData(9, 6, 17, "randomText.txt")]
 145        [InlineData(9, 4, 19, "randomText.txt")]
 146        [InlineData(10, 0, 99, "randomText.txt")]
 147        [InlineData(10, 5, 61, "randomText.txt")]
 148        [InlineData(10, 4, 63, "randomText.txt")]
 149        [InlineData(10, 7, 50, "randomText.txt")]
 150        [InlineData(11, 0, 15, "randomText.txt")]
 151        [InlineData(11, 10, 20, "randomText.txt")]
 152        [InlineData(11, 2, 28, "randomText.txt")]
 153        [InlineData(12, 0, 18, "randomText.txt")]
 154        [InlineData(12, 7, 17, "randomText.txt")]
 155        [InlineData(12, 5, 5, "randomText.txt")]
 156        [InlineData(13, 0, 7, "randomText.txt")]
 157        [InlineData(13, 5, 4, "randomText.txt")]
 158        [InlineData(13, 11, 18, "randomText.txt")]
 159        [InlineData(13, 7, 27, "randomText.txt")]
 160        [InlineData(14, 0, 13, "randomText.txt")]
 161        [InlineData(14, 9, 11, "randomText.txt")]
 162        [InlineData(14, 7, 3, "randomText.txt")]
 163        [InlineData(5, 2, 2, "randomText2.txt")]
 164        [InlineData(5, 3, 10, "randomText2.txt")]
 165        [InlineData(5, 4, 7, "randomText2.txt")]
 166        [InlineData(6, 3, 10, "randomText2.txt")]
 167        [InlineData(6, 1, 3, "randomText2.txt")]
 168        [InlineData(6, 0, 7, "randomText2.txt")]
 169        [InlineData(7, 0, 21, "randomText2.txt")]
 170        [InlineData(7, 3, 23, "randomText2.txt")]
 171        [InlineData(7, 5, 25, "randomText2.txt")]
 172        [InlineData(8, 0, 4, "randomText2.txt")]
 173        [InlineData(8, 6, 23, "randomText2.txt")]
 174        [InlineData(8, 1, 24, "randomText2.txt")]
 175        [InlineData(9, 0, 100, "randomText2.txt")]
 176        [InlineData(9, 6, 17, "randomText2.txt")]
 177        [InlineData(9, 4, 19, "randomText2.txt")]
 178        [InlineData(10, 0, 99, "randomText2.txt")]
 179        [InlineData(10, 5, 61, "randomText2.txt")]
 180        [InlineData(10, 4, 63, "randomText2.txt")]
 181        [InlineData(10, 7, 50, "randomText2.txt")]
 182        [InlineData(11, 0, 15, "randomText2.txt")]
 183        [InlineData(11, 10, 20, "randomText2.txt")]
 184        [InlineData(11, 2, 28, "randomText2.txt")]
 185        [InlineData(12, 0, 18, "randomText2.txt")]
 186        [InlineData(12, 7, 17, "randomText2.txt")]
 187        [InlineData(12, 5, 5, "randomText2.txt")]
 188        [InlineData(13, 0, 7, "randomText2.txt")]
 189        [InlineData(13, 5, 4, "randomText2.txt")]
 190        [InlineData(13, 11, 18, "randomText2.txt")]
 191        [InlineData(13, 7, 27, "randomText2.txt")]
 192        [InlineData(14, 0, 13, "randomText2.txt")]
 193        [InlineData(14, 9, 11, "randomText2.txt")]
 194        [InlineData(14, 7, 3, "randomText2.txt")]
 195        [InlineData(5, 2, 2, "randomText3.txt")]
 196        [InlineData(5, 3, 10, "randomText3.txt")]
 197        [InlineData(5, 4, 7, "randomText3.txt")]
 198        [InlineData(6, 3, 10, "randomText3.txt")]
 199        [InlineData(6, 1, 3, "randomText3.txt")]
 200        [InlineData(6, 0, 7, "randomText3.txt")]
 201        [InlineData(7, 0, 21, "randomText3.txt")]
 202        [InlineData(7, 3, 23, "randomText3.txt")]
 203        [InlineData(7, 5, 25, "randomText3.txt")]
 204        [InlineData(8, 0, 4, "randomText3.txt")]
 205        [InlineData(8, 6, 23, "randomText3.txt")]
 206        [InlineData(8, 1, 24, "randomText3.txt")]
 207        [InlineData(9, 0, 100, "randomText3.txt")]
 208        [InlineData(9, 6, 17, "randomText3.txt")]
 209        [InlineData(9, 4, 19, "randomText3.txt")]
 210        [InlineData(10, 0, 99, "randomText3.txt")]
 211        [InlineData(10, 5, 61, "randomText3.txt")]
 212        [InlineData(10, 4, 63, "randomText3.txt")]
 213        [InlineData(10, 7, 50, "randomText3.txt")]
 214        [InlineData(11, 0, 15, "randomText3.txt")]
 215        [InlineData(11, 10, 20, "randomText3.txt")]
 216        [InlineData(11, 2, 28, "randomText3.txt")]
 217        [InlineData(12, 0, 18, "randomText3.txt")]
 218        [InlineData(12, 7, 17, "randomText3.txt")]
 219        [InlineData(12, 5, 5, "randomText3.txt")]
 220        [InlineData(13, 0, 7, "randomText3.txt")]
 221        [InlineData(13, 5, 4, "randomText3.txt")]
 222        [InlineData(13, 11, 18, "randomText3.txt")]
 223        [InlineData(13, 7, 27, "randomText3.txt")]
 224        [InlineData(14, 0, 13, "randomText3.txt")]
 225        [InlineData(14, 9, 11, "randomText3.txt")]
 226        [InlineData(14, 7, 3, "randomText3.txt")]
 227
 228        public void TestReadCharsRandomParameters(int bufferSize,int minCharsInBuffer,int chunksToReadSize,string fileNa
 1229        {
 1230            var testFilePath = Path.Combine(testFilesDirectory, fileName);
 231            // Read the contents of the file into a string
 1232            string fileContents = File.ReadAllText(testFilePath);
 233
 234            // Convert the string to a char array
 1235            char[] expectedChars = fileContents.ToCharArray();
 236
 1237            using (FileStream fs = new FileStream(testFilePath, FileMode.Open, FileAccess.Read))
 1238            {
 1239                CustomStreamReader csr = new CustomStreamReader(fs, bufferSize, minCharsInBuffer);
 1240                int index = 0;
 1241                while (true)
 1242                {
 1243                    char[] buffer = new char[chunksToReadSize];
 1244                    int bytesRead = csr.ReadChars(chunksToReadSize, buffer);
 245
 1246                    for (int i = 0; i < bytesRead; i++)
 1247                    {
 1248                        Assert.Equal(expectedChars[index * chunksToReadSize + i], buffer[i]);
 1249                    }
 250
 1251                    if (bytesRead < chunksToReadSize) break;
 1252                    index++;
 1253                }
 254
 1255            }
 1256        }
 257
 258        [Theory]
 259        [InlineData(5, 2, 2, "loremIpsum.txt")]
 260        [InlineData(5, 3, 10, "loremIpsum.txt")]
 261        [InlineData(5, 1, 7, "loremIpsum.txt")]
 262        [InlineData(6, 3, 10, "loremIpsum.txt")]
 263        [InlineData(6, 1, 3, "loremIpsum.txt")]
 264        [InlineData(6, 1, 7, "loremIpsum.txt")]
 265        [InlineData(7, 1, 21, "loremIpsum.txt")]
 266        [InlineData(7, 3, 23, "loremIpsum.txt")]
 267        [InlineData(7, 5, 25, "loremIpsum.txt")]
 268        [InlineData(8, 1, 4, "loremIpsum.txt")]
 269        [InlineData(8, 6, 23, "loremIpsum.txt")]
 270        [InlineData(8, 1, 24, "loremIpsum.txt")]
 271        [InlineData(9, 1, 100, "loremIpsum.txt")]
 272        [InlineData(9, 6, 17, "loremIpsum.txt")]
 273        [InlineData(9, 4, 19, "loremIpsum.txt")]
 274        [InlineData(10, 1, 99, "loremIpsum.txt")]
 275        [InlineData(10, 5, 61, "loremIpsum.txt")]
 276        [InlineData(10, 4, 63, "loremIpsum.txt")]
 277        [InlineData(10, 7, 50, "loremIpsum.txt")]
 278        [InlineData(11, 1, 15, "loremIpsum.txt")]
 279        [InlineData(11, 10, 20, "loremIpsum.txt")]
 280        [InlineData(11, 2, 28, "loremIpsum.txt")]
 281        [InlineData(12, 1, 18, "loremIpsum.txt")]
 282        [InlineData(12, 7, 17, "loremIpsum.txt")]
 283        [InlineData(12, 5, 5, "loremIpsum.txt")]
 284        [InlineData(13, 1, 7, "loremIpsum.txt")]
 285        [InlineData(13, 5, 4, "loremIpsum.txt")]
 286        [InlineData(13, 11, 18, "loremIpsum.txt")]
 287        [InlineData(13, 7, 27, "loremIpsum.txt")]
 288        [InlineData(14, 1, 13, "loremIpsum.txt")]
 289        [InlineData(14, 9, 11, "loremIpsum.txt")]
 290        [InlineData(14, 7, 3, "loremIpsum.txt")]
 291        [InlineData(5, 2, 2, "randomText.txt")]
 292        [InlineData(5, 3, 10, "randomText.txt")]
 293        [InlineData(5, 4, 7, "randomText.txt")]
 294        [InlineData(6, 3, 10, "randomText.txt")]
 295        [InlineData(6, 1, 3, "randomText.txt")]
 296        [InlineData(6, 1, 7, "randomText.txt")]
 297        [InlineData(7, 1, 21, "randomText.txt")]
 298        [InlineData(7, 3, 23, "randomText.txt")]
 299        [InlineData(7, 5, 25, "randomText.txt")]
 300        [InlineData(8, 1, 4, "randomText.txt")]
 301        [InlineData(8, 6, 23, "randomText.txt")]
 302        [InlineData(8, 1, 24, "randomText.txt")]
 303        [InlineData(9, 1, 100, "randomText.txt")]
 304        [InlineData(9, 6, 17, "randomText.txt")]
 305        [InlineData(9, 4, 19, "randomText.txt")]
 306        [InlineData(10, 1, 99, "randomText.txt")]
 307        [InlineData(10, 5, 61, "randomText.txt")]
 308        [InlineData(10, 4, 63, "randomText.txt")]
 309        [InlineData(10, 7, 50, "randomText.txt")]
 310        [InlineData(11, 1, 15, "randomText.txt")]
 311        [InlineData(11, 10, 20, "randomText.txt")]
 312        [InlineData(11, 2, 28, "randomText.txt")]
 313        [InlineData(12, 1, 18, "randomText.txt")]
 314        [InlineData(12, 7, 17, "randomText.txt")]
 315        [InlineData(12, 5, 5, "randomText.txt")]
 316        [InlineData(13, 1, 7, "randomText.txt")]
 317        [InlineData(13, 5, 4, "randomText.txt")]
 318        [InlineData(13, 11, 18, "randomText.txt")]
 319        [InlineData(13, 7, 27, "randomText.txt")]
 320        [InlineData(14, 1, 13, "randomText.txt")]
 321        [InlineData(14, 9, 11, "randomText.txt")]
 322        [InlineData(14, 7, 3, "randomText.txt")]
 323        [InlineData(5, 2, 2, "randomText2.txt")]
 324        [InlineData(5, 3, 10, "randomText2.txt")]
 325        [InlineData(5, 4, 7, "randomText2.txt")]
 326        [InlineData(6, 3, 10, "randomText2.txt")]
 327        [InlineData(6, 1, 3, "randomText2.txt")]
 328        [InlineData(6, 1, 7, "randomText2.txt")]
 329        [InlineData(7, 1, 21, "randomText2.txt")]
 330        [InlineData(7, 3, 23, "randomText2.txt")]
 331        [InlineData(7, 5, 25, "randomText2.txt")]
 332        [InlineData(8, 1, 4, "randomText2.txt")]
 333        [InlineData(8, 6, 23, "randomText2.txt")]
 334        [InlineData(8, 1, 24, "randomText2.txt")]
 335        [InlineData(9, 1, 100, "randomText2.txt")]
 336        [InlineData(9, 6, 17, "randomText2.txt")]
 337        [InlineData(9, 4, 19, "randomText2.txt")]
 338        [InlineData(10, 1, 99, "randomText2.txt")]
 339        [InlineData(10, 5, 61, "randomText2.txt")]
 340        [InlineData(10, 4, 63, "randomText2.txt")]
 341        [InlineData(10, 7, 50, "randomText2.txt")]
 342        [InlineData(11, 1, 15, "randomText2.txt")]
 343        [InlineData(11, 10, 20, "randomText2.txt")]
 344        [InlineData(11, 2, 28, "randomText2.txt")]
 345        [InlineData(12, 1, 18, "randomText2.txt")]
 346        [InlineData(12, 7, 17, "randomText2.txt")]
 347        [InlineData(12, 5, 5, "randomText2.txt")]
 348        [InlineData(13, 1, 7, "randomText2.txt")]
 349        [InlineData(13, 5, 4, "randomText2.txt")]
 350        [InlineData(13, 11, 18, "randomText2.txt")]
 351        [InlineData(13, 7, 27, "randomText2.txt")]
 352        [InlineData(14, 1, 13, "randomText2.txt")]
 353        [InlineData(14, 9, 11, "randomText2.txt")]
 354        [InlineData(14, 7, 3, "randomText2.txt")]
 355        [InlineData(5, 2, 2, "randomText3.txt")]
 356        [InlineData(5, 3, 10, "randomText3.txt")]
 357        [InlineData(5, 4, 7, "randomText3.txt")]
 358        [InlineData(6, 3, 10, "randomText3.txt")]
 359        [InlineData(6, 1, 3, "randomText3.txt")]
 360        [InlineData(6, 1, 7, "randomText3.txt")]
 361        [InlineData(7, 1, 21, "randomText3.txt")]
 362        [InlineData(7, 3, 23, "randomText3.txt")]
 363        [InlineData(7, 5, 25, "randomText3.txt")]
 364        [InlineData(8, 1, 4, "randomText3.txt")]
 365        [InlineData(8, 6, 23, "randomText3.txt")]
 366        [InlineData(8, 1, 24, "randomText3.txt")]
 367        [InlineData(9, 1, 100, "randomText3.txt")]
 368        [InlineData(9, 6, 17, "randomText3.txt")]
 369        [InlineData(9, 4, 19, "randomText3.txt")]
 370        [InlineData(10, 1, 99, "randomText3.txt")]
 371        [InlineData(10, 5, 61, "randomText3.txt")]
 372        [InlineData(10, 4, 63, "randomText3.txt")]
 373        [InlineData(10, 7, 50, "randomText3.txt")]
 374        [InlineData(11, 1, 15, "randomText3.txt")]
 375        [InlineData(11, 10, 20, "randomText3.txt")]
 376        [InlineData(11, 2, 28, "randomText3.txt")]
 377        [InlineData(12, 1, 18, "randomText3.txt")]
 378        [InlineData(12, 7, 17, "randomText3.txt")]
 379        [InlineData(12, 5, 5, "randomText3.txt")]
 380        [InlineData(13, 1, 7, "randomText3.txt")]
 381        [InlineData(13, 5, 4, "randomText3.txt")]
 382        [InlineData(13, 11, 18, "randomText3.txt")]
 383        [InlineData(13, 7, 27, "randomText3.txt")]
 384        [InlineData(14, 1, 13, "randomText3.txt")]
 385        [InlineData(14, 9, 11, "randomText3.txt")]
 386        [InlineData(14, 7, 3, "randomText3.txt")]
 387        public void TestReadCharAndMoveBack(int bufferSize, int minCharsInBuffer, int numberOfMoveBacks, string fileName
 1388        {
 1389            var testFilePath = Path.Combine(testFilesDirectory, fileName);
 390            // Read the contents of the file into a string
 1391            string fileContents = File.ReadAllText(testFilePath);
 392
 393            // Convert the string to a char array
 1394            char[] expectedChars = fileContents.ToCharArray();
 395
 1396            int movedBackCount = 0;
 397
 1398            using (FileStream fs = new FileStream(testFilePath, FileMode.Open, FileAccess.Read))
 1399            {
 1400                CustomStreamReader csr = new CustomStreamReader(fs, bufferSize, minCharsInBuffer);
 1401                int index = 0;
 1402                int moveBackRandom = 2;
 1403                int moveBackActual = 2;
 1404                char savedChar = 'z';
 1405                bool init = true;
 406
 407
 408                // Create an instance of Random
 1409                Random random = new Random();
 410
 1411                while (true)
 1412                {
 413
 1414                    int nextSymbol = csr.ReadChar();
 1415                    if (nextSymbol == -1) break;
 416
 1417                    char nextChar = (char)nextSymbol;
 1418                    Assert.Equal(expectedChars[index], nextChar);
 419
 1420                    if (init)
 1421                    {
 1422                        savedChar = nextChar;
 1423                        moveBackRandom = random.Next(1, minCharsInBuffer);
 1424                        moveBackActual = moveBackRandom-1;
 1425                        init = false;
 1426                    }
 427                    else
 1428                    {
 1429                        if(moveBackActual== 0 && movedBackCount < numberOfMoveBacks)
 1430                        {
 1431                            movedBackCount++;
 1432                            csr.MoveBack(moveBackRandom);
 1433                            nextChar = (char)csr.ReadChar();
 1434                            Assert.Equal(savedChar, nextChar);
 1435                            index -= (moveBackRandom-1);
 1436                            moveBackRandom = random.Next(1, minCharsInBuffer);
 1437                            moveBackActual = moveBackRandom-1;
 438
 1439                        }
 1440                    }
 1441                    moveBackActual--;
 1442                    index++;
 443
 444
 1445                }
 446
 1447            }
 1448        }
 449    }
 450}