#c# #sorting #testing #specifications
#c# #сортировка #тестирование #технические характеристики
Вопрос:
Я использую SpecExplorer для создания набора тестов. У меня есть одна функция, которая должна возвращать отсортированную коллекцию строк (то же поведение сортировки, что и List.Sort()).
В модели я использую Microsoft.Моделирование.Последовательность. Невозможно использовать список, потому что SpecExplorer не может оценить текущее состояние, если вы используете списки…
Мой вопрос: как я могу вернуть отсортированную Microsoft.Моделирование.Последовательность без использования списков… Я знаю, что мог бы сравнить все строки друг с другом и с каждым шагом сравнения создавать новую неизменяемую последовательность, но это кажется слишком сложным. Есть ли более простое решение?
Оффтопик: нет тега SpecExplorer…
Редактировать:
текущий рабочий пример
Sequence<string> toSort = new Sequence<string>(new string[] { "Delta", "delta", "Alpha", "Gamma", "Beta" });
Sequence<string> sorted = new Sequence<string>();
while (toSort.Count != 0)
{
int currentMaxIndex = -1;
for (int i = 0; i < toSort.Count; i )
if (currentMaxIndex == -1 || toSort[i].CompareTo(toSort[currentMaxIndex]) < 0)
currentMaxIndex = i;
sorted = sorted.Add(toSort[currentMaxIndex]);
toSort = toSort.RemoveAt(currentMaxIndex);
}
Ответ №1:
Возможно, некоторые вопросы:
- К вашей функции, которая должна возвращать отсортированную последовательность: используется ли эта функция в модели, т.Е. В методах правил, и является ли последовательность аргументом правила?
- Предполагая, что да: почему вы вообще хотите моделировать отсортированную последовательность? В последовательности по определению важен порядок. Если вы сортируете последовательность, порядок не важен, потому что порядок всегда один и тот же: определенный порядок сортировки?
- Это причина, по которой Microsoft.Моделирование.Последовательность не имеет функции сортировки, и ее наличие не очень важно.
- Если все это так, вы можете использовать в своей модели аргумент правила типа Microsft.Modeling.Set. Ваши исследования модели будут намного меньше, быстрее и чище, а также любые сценарии cord, которые могут каким-то образом попытаться сократить пространство состояний.
- Если ваша последовательность не является аргументом правила, вы можете легко использовать любой код на c # (например, списки). У Spec Explorer не должно быть никаких проблем с этим.
- Если вам действительно нужна сортировка по неизвестной причине, возможно, Linq может сделать ваш код короче и приятнее…