Beispiel #1
0
        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();
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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();
        }