15 / 24 · प्रयोग
प्रयोगशाला: 1024 स्टॉल पैटर्न जाँचें
सभी दस-चक्र ready पैटर्न से मान बनाए रखना, प्रतिस्थापन और खाली करना परखें।
पाठ पढ़ना मुफ़्त है। प्रगति सेव करने के लिए नामांकन करें।
स्टॉल में मान और क्रम सुरक्षित रखें
स्वयं elastic-model.mjs बनाएँ, नीचे का कोड सहेजें और node elastic-model.mjs चलाएँ। स्रोत चार क्रमबद्ध आइटम प्रस्तुत करता है और केवल स्वीकार होने पर आगे बढ़ता है। पैटर्न का बिट शून्य किनारा 0, बिट एक किनारा 1 आदि नियंत्रित करता है। सभी 1024 दस-बिट ready पैटर्न परखें, फिर लंबित काम निकालने के लिए प्राप्तकर्ता तैयार रखें।
प्रतिस्थापन तय करने से पहले पुराने स्थान से वितरण करें। खाली स्थान स्टॉल किए प्राप्तकर्ता के साथ भी एक आइटम स्वीकार करता है। भरा और स्टॉल किया स्थान स्रोत को आगे नहीं बढ़ा सकता। हर किनारे पर next बढ़ाने से अस्वीकार आइटम छूट जाएँगे और सही बफ़र होने पर भी परीक्षण स्रोत गलत होगा।
import assert from 'node:assert/strict';
const values = [0, 9, 255, 12];
let deliveries = 0;
for (let pattern = 0; pattern < 1024; pattern++) {
let slot = null, next = 0;
const seen = [];
for (let edge = 0; edge < 20; edge++) {
const ready = edge >= 10 || ((pattern >>> edge) & 1) === 1;
const old = slot;
const inReady = old === null || ready;
if (old !== null && ready) seen.push(old);
if (inReady) {
slot = next < values.length ? { tag: next, y: values[next] } : null;
if (slot !== null) next++;
} else {
assert.deepEqual(slot, old);
}
assert.equal(next - seen.length, Number(slot !== null));
}
assert.deepEqual(seen, values.map((y, tag) => ({ tag, y })));
assert.equal(slot, null);
deliveries += seen.length;
}
console.log(`ELASTIC PASS: 1024 patterns, ${deliveries} deliveries`);पैटर्न शून्य में प्राप्तकर्ता पहले दस किनारों पर स्टॉल करता है। Tag0,y0 किनारा 0 पर खाली स्थान में प्रवेश करता है और किनारा 9 तक वहीं रहता है। किनारा 10 उसे वितरित करता है और tag1,y9 रखता है। फिर टैग 1,2,3 किनारा 11,12,13 पर स्थानांतरित होते हैं। वैध शून्य को null न मानें। सफलता पर 1024 पैटर्न और 4096 वितरण बताए जाते हैं।
हर किनारे के बाद स्वीकार माइनस वितरित वर्तमान भरे स्थान की संख्या है। यह स्थानीय हिसाब अंतिम आउटपुट तुलना से पहले विफलता को सीमित करता है। बनाए रखने की जाँच पेलोड सुरक्षा परखती है, लेकिन वास्तविक कार्यान्वयन की तुलना में केवल इस मॉडल के अपरिवर्तित चर के बजाय उसका वास्तविक आउटपुट देखना होगा। सभी दस-चक्र पैटर्न परखना सीमित परीक्षण है, हर संभव स्टॉल अवधि का प्रमाण नहीं। अंततः पूर्णता के लिए यह भी मानना पड़ता है कि प्राप्तकर्ता कभी तैयार होगा; अनिश्चित बैकप्रेशर में संरक्षण चाहिए, निश्चित वितरण नहीं।
खुद आज़माएँ
पैटर्न शून्य में किनारा 0 से 9 तक स्रोत का next कितना बढ़ता है? किनारा 10 के बाद भरे स्थान की संख्या और next-seen.length क्या हैं?
व्याख्या पढ़ें
केवल किनारा 0 का आइटम स्वीकार होता है, इसलिए next=1। किनारा 10 पर tag0 जाता है और tag1 आता है: next=2, seen.length=1 और अंतर तथा भरे स्थान की संख्या दोनों एक हैं।