Comments (3)
I will start with runCase("recursion", [R] );
.
Essentially it tests:
function run() {
asap(run);
}
run();
To test that all tasks are executed in correct order, we do something like:
var expectedOrder = [];
var calledOrder = [];
var _asap = asap;
var asap = function (task) {
var index = expectedOrder.length;
if (index >= 4000) {
return;
}
expectedOrder.push(index);
_asap(function () {
calledOrder.push(index);
task();
// done?
if (calledOrder.length >= expectedOrder.length) {
expect(calledOrder).to.eql(expectedOrder);
}
});
};
As you can see we stop when no further tasks are queued, or when a maximum of 4000 tasks where queued.
expectedOrder
is always an ordered array of integers ([0, 1, 2, 3, ...]
) with length <= 4000
.
Let's see other cases.
runCase("errors at end", [[e], e], e );
is essentially:
function run() {
asap(function () {
asap(function () {
throw new Error();
});
throw new Error();
})
throw new Error();
}
run();
runCase("recursion with errors", [R, e] );
is essentially:
function run() {
asap(function () {
run();
throw new Error();
});
}
run();
runCase("multiple recursions", [R], [R], [R, e] );
is essentially:
function run() {
asap(function () {
run();
});
asap(function () {
run();
});
asap(function () {
run();
throw new Error();
});
}
run();
runCase("recursion - mixed", [R, [], e] );
is essentially:
function run() {
asap(function () {
run();
asap(function () {
});
throw new Error();
});
}
run();
runCase("recursion - mixed 2", [R, [[[[], e]]], e] );
is essentially:
function run() {
asap(function () {
run();
asap(function () {
asap(function () {
asap(function () {
asap(function () {
});
throw new Error();
});
});
});
throw new Error();
});
}
run();
from asap.
Now with 78c4e1a, you can use both approaches.
For instance, instead of
runCase("recursion with errors", [R, e] );
you can
runCase("recursion with errors", function run() {
asap(function () {
run();
throw new Error();
});
});
from asap.
Awesome, thanks for explaining!
from asap.
Related Issues (20)
- Browserify Support HOT 15
- Cross library interleaving can cause node 10's nextTick limit to be hit. HOT 1
- Publish a new version HOT 4
- function to change rawAsap.capacity value must be added HOT 3
- Consider using Promise.prototype.then HOT 4
- asap queue can be effectively overflown (using [email protected]) HOT 2
- Usability in development mode with thrown errors HOT 5
- Browser field contains invalid route in npm HOT 8
- Microtask queue can be made faster HOT 4
- asap uses timer, not MutationObserver, in Safari HOT 1
- react-native throw Error when importing asap HOT 8
- Chrome + postMessage = slow HOT 1
- Source is poinitng to internal uber repo HOT 3
- npm published version 2.05 is not in git HOT 1
- Browser-asap requiring wrong raw file (non-browser version). HOT 4
- Does asap have an ECCN? HOT 2
- Contributors? HOT 1
- Use queueMicrotask? HOT 2
- esbuild fails: "browser" field is not according to spec
- TypeError: t.observe is not a function. (In 't.observe(l,{characterData:!0})', 't.observe' is undefined) HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from asap.