Comments (6)
Also, all signal tests are skipped for me right now.
from amp.
Signal tests have been fixed, all timer tests have a grace period of 1 millisecond now, but the UvDriverTest::testExecutionOrderGuarantees
is still broken.
from amp.
So the issue with this is delaying from what I can tell. I've written a shorter test that's a little easier to follow and displays the issue more clearly:
public function testExecutionOrder()
{
// Our expected output
$this->expectOutputString('defer writable reenabled delay ');
// Set up a closure to output
$output = function(Driver $loop, string $output) {
$called = false;
// Return a function that tracks whether it has been called
return function($id) use ($loop, $output, &$called) {
if ($called) {
$this->fail('Watcher callback called too often');
}
$called = true;
$loop->cancel($id);
echo $output . ' ';
};
};
// Begin a loop for testing
$this->start(function (Driver $loop) use (&$ticks, $output) {
// Lets start with the reenabled watcher
$reenabled = $loop->onWritable(STDIN, $output($loop, 'reenabled'));
$loop->disable($reenabled);
// Lets defer something now
$loop->defer($output($loop, 'defer'));
// Move on to delay
$loop->delay(0, $output($loop, 'delay'));
// Writable
$loop->onWritable(STDIN, $output($loop, 'writable'));
// Reenable
$loop->enable($reenabled);
});
}
Adding this to the DriverTest
class will result in a failure for the UV driver looking like this:
1) Amp\Test\Loop\UvDriverTest::testExecutionOrder
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'defer writable reenabled delay '
+'defer delay writable reenabled '
Which tells me that UV's timer functionality is perhaps acting unexpectedly with low millisecond delays. I threw the whole of the handling code for delay in a $this->defer
block, but that didn't really do much beyond move the delay
to output after writable
.
Is there a good spot where I could talk to someone who maybe knows more about this than I do?
from amp.
Actually, we do not guarantee timer and IO watcher order according to
Line 55 in 95b3f62
from amp.
Well, perhaps we should redo the test in a way that allows for that and makes it clear that that may happen. Let me see if I can come up with anything today and I'll submit a PR.
from amp.
The test totally needs a redo, it's horrible. Thanks for looking into that. 👍
from amp.
Related Issues (20)
- QUIC support HOT 2
- A concise way of resolving results that may turn out to be Promise, Generator or something else HOT 4
- An object reference sticks in the library HOT 1
- Running an async task in a synchronous application HOT 9
- stream_select hangs forever when FDs > 1024 are used HOT 5
- Getting access to child process data on SIGCHLD in Loop::onSignal. HOT 16
- Confusing diagram in README HOT 6
- Return self in Future::ignore HOT 1
- UnhandledFutureError is hard to debug HOT 2
- Migration guide for combinator functions HOT 5
- FiberError: Cannot switch fibers in current execution context on Laravel HOT 4
- 32 bit PHP: Return value of Amp\Loop\NativeDriver::now() must be of the type int, float returned HOT 5
- Functions should require callable instead of closures HOT 10
- Any way to create or get a context for coroutine. HOT 5
- Version confusion HOT 8
- Shouldn't Future::finally() pass the future data to the provided callback? HOT 7
- Event loop terminated without resuming the current suspension (the cause is either a fiber deadlock, or an incorrectly unreferenced/canceled watcher) HOT 3
- Future combinators HOT 8
- When to not to use `async`?
- Comparison with ReactPHP HOT 8
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 amp.