प्रस्तुति Core.dll में .NET Framework में, एक सामान्य PriorityQueue<T>
वर्ग है जिसका कोड here पाया जा सकता है।माइक्रोसॉफ्ट के आंतरिक प्राथमिकता Queue <T> में बग?
मैं छंटाई परीक्षण करने के लिए एक छोटी कार्यक्रम में लिखा था, और परिणाम महान नहीं थे:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using MS.Internal;
namespace ConsoleTest {
public static class ConsoleTest {
public static void Main() {
PriorityQueue<int> values = new PriorityQueue<int>(6, Comparer<int>.Default);
Random random = new Random(88);
for (int i = 0; i < 6; i++)
values.Push(random.Next(0, 10000000));
int lastValue = int.MinValue;
int temp;
while (values.Count != 0) {
temp = values.Top;
values.Pop();
if (temp >= lastValue)
lastValue = temp;
else
Console.WriteLine("found sorting error");
Console.WriteLine(temp);
}
Console.ReadLine();
}
}
}
परिणाम:
2789658
3411390
4618917
6996709
found sorting error
6381637
9367782
एक छँटाई त्रुटि हुई है, और नमूने का आकार है अगर बढ़ी, सॉर्टिंग त्रुटियों की संख्या कुछ हद तक आनुपातिक रूप से बढ़ जाती है।
क्या मैंने कुछ गलत किया है? यदि नहीं, PriorityQueue
कक्षा के कोड में बग कहां स्थित है?
स्रोत कोड में टिप्पणियों के मुताबिक, माइक्रोसॉफ्ट 2005-02-14 के बाद से इस कोड का उपयोग कर रहा है। मुझे आश्चर्य है कि इस तरह की एक बग 12 साल से अधिक के लिए नोटिस से कैसे बच निकला? – Nat
@Nat क्योंकि एकमात्र स्थान माइक्रोसॉफ्ट इसका उपयोग करता है [यहां है] (https://referencesource.microsoft.com/#PresentationCore/Core/CSharp/MS/Internal/FontFace/PhysicalFontFamily.cs,185) और निचला चयन करने वाला फ़ॉन्ट प्राथमिकता टाइपफेस कुछ समय नोटिस करने के लिए एक कठिन बग है। –