private void lvwGroups_ColumnClick(object sender, ColumnClickEventArgs e) { GroupSorter sorter = (GroupSorter)lvwGroups.ListViewItemSorter; switch (e.Column) { case 0: sorter.SortBy = GroupSorter.SortByColumn.Name; break; case 1: sorter.SortBy = GroupSorter.SortByColumn.Members; break; } if (sorter.CurrentOrder == GroupSorter.SortOrder.Ascending) { sorter.CurrentOrder = GroupSorter.SortOrder.Descending; } else { sorter.CurrentOrder = GroupSorter.SortOrder.Ascending; } lvwGroups.Sort(); }
public void Test( [ValueSource(nameof(TestCases))] TestCase testCase, [ValueSource(nameof(BufferSizes))] BufferSize bufferSize) { var configMock = new Mock <IConfig>(); int usingBufferSize = LargeBufferSize; if (bufferSize < BufferSize.Large) { usingBufferSize = sizeof(ulong); if (bufferSize != BufferSize.Min) { ++usingBufferSize; } } configMock .SetupGet(o => o.UsingBufferLength) .Returns(usingBufferSize); var physicalBufferLength = usingBufferSize + Consts.BufferReadingEnsurance; configMock .SetupGet(o => o.PhysicalBufferLength) .Returns(physicalBufferLength); ISortingSegmentsSupplier sortingSegmentsSupplier = new SortingSegmentsSupplier( configMock.Object); var lineIndexesExtractorMock = new Mock <ILinesIndexesExtractor>(); IGroupSorter groupSorter = new GroupSorter( sortingSegmentsSupplier, lineIndexesExtractorMock.Object); var groupBytesCount = testCase.GroupBytes.Length; var groupBuffersCount = (int)Math.Ceiling((double) groupBytesCount / usingBufferSize); var buffersCount = BuffersOffset + groupBuffersCount + OverBuffersCount; byte[][] buffers = Enumerable .Range(0, buffersCount) .Select(_ => new byte[physicalBufferLength]) .ToArray(); for (int i = 0; i < groupBuffersCount - 1; i++) { Array.Copy(testCase.GroupBytes, i * usingBufferSize, buffers[BuffersOffset + i], 0, usingBufferSize); } Array.Copy(testCase.GroupBytes, (groupBuffersCount - 1) * usingBufferSize, buffers[BuffersOffset + groupBuffersCount - 1], 0, groupBytesCount % usingBufferSize); var lines = new LineIndexes[LinesStorageLength]; var segments = new ulong[LinesStorageLength]; var groupMock = new Mock <IGroup>(); groupMock .SetupGet(o => o.BytesCount) .Returns(groupBytesCount); groupMock .SetupGet(o => o.Buffers) .Returns(new ArraySegment <byte[]>( buffers, BuffersOffset, groupBuffersCount)); groupMock .SetupGet(o => o.Lines) .Returns(new ArraySegment <LineIndexes>( lines, LinesRangeOffset, testCase.InputLines.Length)); groupMock .SetupGet(o => o.SortingSegments) .Returns(new ArraySegment <ulong>( segments, LinesRangeOffset, testCase.InputLines.Length)); lineIndexesExtractorMock .Setup(o => o.ExtractIndexes(groupMock.Object)) .Callback(() => Array.Copy(testCase.InputLines, 0, lines, LinesRangeOffset, testCase.InputLines.Length)); groupSorter.Sort(groupMock.Object); var resultLines = lines .Skip(LinesRangeOffset) .Take(testCase.InputLines.Length) .Select(o => o.Start) .ToArray(); // Console.WriteLine(string.Join(" ", testCase.ExpectedSortedLines)); // Console.WriteLine(string.Join(" ", resultLines)); CollectionAssert.AreEqual( testCase.ExpectedSortedLines, resultLines); }
public static void Sort(string input, string output) { IConfig config = new Config( input, output); IGroupsInfoMarger groupsInfoMarger = new GroupsInfoMarger(); IBuffersPool buffersPool = new BuffersPool( config); IIoService ioService = new IoService( buffersPool); ITasksQueue tasksQueue = new TasksQueue( config); IInputReaderFactory inputReaderFactory = new InputReaderFactory( ioService, tasksQueue, buffersPool, config); IGroupsLinesOutputFactory groupsLinessOutputFactory = new GroupsLinesOutputFactory( ioService, tasksQueue, buffersPool, config); IGrouperIOs grouperIOs = new GrouperIOs( inputReaderFactory, groupsLinessOutputFactory, ioService, config); IGrouper grouper = new Grouper( groupsInfoMarger, grouperIOs, tasksQueue, config); IGroupsLoaderFactory groupsLoaderFactory = new GroupsLoaderFactory( buffersPool, ioService, config); ISortingSegmentsSupplier sortingSegmentsSupplier = new SortingSegmentsSupplier( config); ILinesIndexesExtractor linesIndexesExtractor = new LinesIndexesExtractor( config); IGroupSorter groupSorter = new GroupSorter( sortingSegmentsSupplier, linesIndexesExtractor); ISortedGroupWriterFactory sortedGroupWriterFactory = new SortedGroupWriterFactory( ioService, config); ISorter sorter = new Sorter( ioService, grouper, groupsLoaderFactory, groupSorter, sortedGroupWriterFactory, config); sorter.Sort(); }