SpecExplorer如何对Microsoft.Modeling.Sequence进行排序

时间:2014-06-17 07:57:49

标签: c# sorting testing specifications

我正在使用SpecExplorer生成测试套件。我有一个函数应该返回一个有序的字符串集合(与List.Sort()相同的排序行为)。

在模型中我使用的是Microsoft.Modeling.Sequence。无法使用List,因为如果您使用列表,SpecExplorer无法评估当前状态...

我的问题是: 如何在不使用列表的情况下返回已排序的Microsoft.Modeling.Sequence ...我知道我可以相互比较所有字符串,并且每个比较步骤都会创建一个新的不可变序列,但这看起来太复杂了。有更简单的解决方案吗?

OffTopic:没有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 个答案:

答案 0 :(得分:1)

也许有些问题:

  • 对于应该返回已排序序列的函数:此函数是否在模型中使用,即在规则方法中使用并且序列是规则参数?
  • 假设是:为什么要对排序的序列进行建模?按照定义顺序,顺序很重要。如果对序列进行排序,则顺序并不重要,因为顺序始终相同:定义的排序顺序?
  • 这就是为什么Microsoft.Modeling.Sequence没有排序功能并且其中一个不是很重要的原因。
  • 如果是这种情况,您可以在模型中使用Microsft.Modeling.Set类型的规则参数。您的模型探索将更小,更快,更清洁,也可能以某种方式尝试切割状态空间。
  • 如果您的序列不是规则参数,则可以轻松使用任何c#代码(例如列表)。 Spec Explorer应该没有任何问题。
  • 如果你真的因为一个未知的原因需要排序,Linq可以让你的代码更短,更好......