public void ProcessInputDataAndShiftTestLength7Number3Pattern4Step987() { // arrange int step = 98798; int bufferSize = 1000; int patternLength = 7; int textLength = 14; char[] alphabet = new char[] { 'a', 'c', 'g', 't' }; StringCompareAccumulator statisticAccumulator = new StringCompareAccumulator(new StringCompareSaver(), BoyerMooreComparer.AlgorythmNameBadSymbolAdv, patternLength, textLength, bufferSize, alphabet.Length); statisticAccumulator.Delete(); int size = patternLength + textLength; long max = 1L << (2 * size); long sequenceAsNumber = 0; int[] sequence = new int[size]; char[] charSequence = new char[size]; long[] masks = new long[size]; long mask = 3; for (int i = 0; i < size; i++) { masks[i] = mask; mask <<= 2; } // act while (sequenceAsNumber < max) { int shift = 0; for (int i = 0; i < size; i++) { sequence[i] = (int)((sequenceAsNumber & masks[i]) >> shift); shift += 2; } sequenceAsNumber += step; charSequence = sequence.Select(j => alphabet[j]).ToArray(); string pattern = new string(charSequence.Take(patternLength).ToArray()); string text = new string(charSequence.Skip(patternLength).Take(textLength).ToArray()); AndShift andShift = new AndShift() { StatisticAccumulator = statisticAccumulator }; // act andShift.FindSubstring(text, pattern); } statisticAccumulator.SaveRemain(); // assert }
public void AndShiftCase2Text() { // arrange char[] alphabet = new char[] { 'a', 'c' }; string pattern = "aaaaaa"; string text = "aaccaaaccaacacaa"; AndShift andShift = new AndShift() { StatisticAccumulator = new FakeStringCompareAccumulator() }; // act andShift.FindSubstring(text, pattern); // assert //string expected = "8,9,10"; // Assert.AreEqual(boyerMooreCompare.OutputPresentation, expected, $"Wrong result:{boyerMooreCompare.OutputPresentation}, expected:{expected}"); }
//-------------------------------------------------------------------------------------- public EnumerateCharSetForAndShift( char[] pCharSet, int pPatternLength, int pTextLength, int pStep = 1, int bufferSize = 1000) : base(pCharSet, pTextLength + pPatternLength, 0) { _patternLength = pPatternLength; _textLength = pTextLength; _step = pStep; _stepCounter = 1; _statisticAccumulator = new StringCompareAccumulator(new StringCompareSaver(), AndShift.AlgorythmName, _patternLength, _textLength, bufferSize, pCharSet.Length); _statisticAccumulator.Delete(); andShift = new AndShift() { StatisticAccumulator = _statisticAccumulator }; }