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

标签 c# sorting testing specifications

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

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

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

题外话:没有 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);
}

最佳答案

可能有些问题:

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

关于c# - SpecExplorer 如何对 Microsoft.Modeling.Sequence 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24258565/

相关文章:

c# - 使用 C# 的序列化异常

c++ - 有序合并问题

java - 对已排序的列表进行排序时,列表迭代在 Java 8 中抛出 ConcurrentModificationException

unit-testing - 针对早期返回进行测试(防御性编程)

bash - 如何在 CURL 命令中传递 POST JSON 数据中的变量值?

c# - 如何检查枚举标志是否与另一个枚举一起升起?

c# - 你能在 ClosedXML (C#) 中填充一个范围吗

mysql - mysql 字母数字排序

javascript - 如何重用 Jasmine 测试

c# - 在调用 Read() 之前如何检查 XmlReader 是否可以读取内容?