एल्गोरिद्म से पहले इनवेरिएंट¶
उपयोगी अपरिवर्तनीय शर्त बताती है कि एल्गोरिदम के चलते क्या सत्य रहता है और समाप्ति पर कॉल करने वाला किस पर भरोसा कर सकता है। लूप से पहले इसे लिखें।
प्रीऑर्डर में उपवृक्ष के अंतराल¶
मानें कि वृक्ष प्रीऑर्डर में निकलता है: हर नोड अपने बच्चों से पहले और हर उपवृक्ष लगातार है। \(e_i\) नोड \(i\) और उसके सभी वंशजों के ठीक बाद का सूचकांक हो।
कथन। सूचकांक को \(e_i\) तक बढ़ाकर उपवृक्ष छोड़ा जा सकता है।
प्रमाण। लगातार होने से सभी वंशज \(e_i\) के पहले हैं। अपवर्जित अंत की परिभाषा से बाद के नोड \(e_i\) पर या उसके बाद हैं। वहाँ बढ़ना ठीक उसी उपवृक्ष को छोड़ता है। रेंडरर के भरोसा करने से पहले वैलिडेटर धारणाएँ जाँचता है।
पूरा स्कैन हर नोड को एक बार देखता है; लागत \(O(N)\) है। उपवृक्ष छोड़ने में एक सूचकांक बदलता है। पेलोड का काम अपनी लागत लेता है। स्थिर समय में छोड़ना, स्थिर समय में रेंडर करना नहीं है।
आउटपुट से पहले मापें¶
रेंडरर पहले बाइटों की संख्या \(m\) मापता है। कॉल करने वाले की आउटपुट क्षमता \(c\) मानें।
मापने और निकालने के क्रम समान नियम अपनाते हैं। सफल आउटपुट ठीक \(m\) बाइट लिखे। विफलता वैध अधूरा परिणाम नहीं लौटाती। प्रकाशन होस्ट का काम है, इसलिए अधूरे बाइट पुराना आउटपुट नहीं बदल सकते।
कैश की वैधता¶
कैश कुंजी परिणाम बदल सकने वाले सभी डेटा को समेटे। केवल सोर्स काफ़ी नहीं: शामिल फ़ाइलें, टेम्पलेट, कॉन्फ़िगरेशन, संदर्भ खोज, संसाधन और अडैप्टर संस्करण भी असर डालते हैं। दर्ज निर्भरताएँ समान हों तभी पुनः उपयोग करें। कुंजी मिले पर आउटपुट न हो तो पुनः उपयोग अमान्य है।
टेस्ट कोर की सीमा पर विफल होने वाले एलोकेटर लगाकर निकली सामग्री मिलाते हैं। इंपोर्ट की भी जाँच होती है। केवल आवंटन गिनना किसी अस्वीकृति से चुपचाप खोए दस्तावेज़ हिस्से को छोड़ सकता है।