From 4517cb67c8e35700d5ee3c8fe1a64bfa2b2a8f78 Mon Sep 17 00:00:00 2001 From: Tsuyoshi CHO Date: Sat, 16 Mar 2024 22:25:07 +0900 Subject: [PATCH 1/6] fix: Update test for Promise.wait timing check --- test/Async/Promise.vimspec | 71 +++++++++++++++++++++++++++----------- 1 file changed, 51 insertions(+), 20 deletions(-) diff --git a/test/Async/Promise.vimspec b/test/Async/Promise.vimspec index 6985126a5..704a518c8 100644 --- a/test/Async/Promise.vimspec +++ b/test/Async/Promise.vimspec @@ -788,34 +788,65 @@ Describe Async.Promise Assert Compare(done, '<=', 2000) End - It waits at least the interval milliseconds (interval < epoch) - let p = Wait(1000).then({ -> 'resolved' }) + It waits within interval range ((interval * n) <= epoch <= (interval * (n + 1))), resolved pattern + let p = Wait(500).then({ -> 'resolved' }) let s = reltime() Assert Equals(p._state, PENDING) " Timer accuracy fixing need - Assert Equals(P.wait(p, { 'interval': 340 }), ['resolved', v:null]) + Assert Equals(P.wait(p, { 'interval': 200 }), ['resolved', v:null]) let done = reltimefloat(reltime(s)) * 1000 - Assert Compare(done, '>=', 1000) - if has('mac') - " TODO: I know this is a terrible IDEA, but this assert makes osx test fails. - " Let's disable until we figure out why and how. - else - Assert Compare(done, '<=', 1360) - endif - - let p = Wait(1000).then({ -> P.reject('rejected') }) + " interval period | 1 | 2 | 3 | 4 | 5 | 6 + " elapsed time |* 0 |* 200 |* 400 |* 600 |* 800 |* 1000 + " detect time range | +------+ + " complete timing |---------------o 500 + " lower limit : 600, upper limit : 800 + Assert Compare(done, '>=', 600) + Assert Compare(done, '<=', 800) + + let p = Wait(700).then({ -> 'resolved' }) let s = reltime() Assert Equals(p._state, PENDING) " Timer accuracy fixing need - Assert Equals(P.wait(p, { 'interval': 340 }), [v:null, 'rejected']) + Assert Equals(P.wait(p, { 'interval': 200 }), ['resolved', v:null]) let done = reltimefloat(reltime(s)) * 1000 - Assert Compare(done, '>=', 1000) - if has('mac') - " TODO: I know this is a terrible IDEA, but this assert makes osx test fails. - " Let's disable until we figure out why and how. - else - Assert Compare(done, '<=', 1360) - endif + " interval period | 1 | 2 | 3 | 4 | 5 | 6 + " elapsed time |* 0 |* 200 |* 400 |* 600 |* 800 |* 1000 + " detect time range | +------+ + " complete timing |----------------------o 700 + " lower limit : 800, upper limit : 1000 + Assert Compare(done, '>=', 800) + Assert Compare(done, '<=', 1000) + End + + It waits within interval range ((interval * n) <= epoch <= (interval * (n + 1))), rejected pattern + let p = Wait(500).then({ -> P.reject('rejected') }) + let s = reltime() + Assert Equals(p._state, PENDING) + " Timer accuracy fixing need + Assert Equals(P.wait(p, { 'interval': 200 }), [v:null, 'rejected']) + let done = reltimefloat(reltime(s)) * 1000 + " interval period | 1 | 2 | 3 | 4 | 5 | 6 + " elapsed time |* 0 |* 200 |* 400 |* 600 |* 800 |* 1000 + " detect time range | +------+ + " complete timing |---------------o 500 + " lower limit : 600, upper limit : 800 + Assert Compare(done, '>=', 600) + Assert Compare(done, '<=', 800) + + + let p = Wait(700).then({ -> P.reject('rejected') }) + let s = reltime() + Assert Equals(p._state, PENDING) + " Timer accuracy fixing need + Assert Equals(P.wait(p, { 'interval': 200 }), [v:null, 'rejected']) + let done = reltimefloat(reltime(s)) * 1000 + " interval period | 1 | 2 | 3 | 4 | 5 | 6 + " elapsed time |* 0 |* 200 |* 400 |* 600 |* 800 |* 1000 + " detect time range | +------+ + " complete timing |----------------------o 700 + " lower limit : 800, upper limit : 1000 + Assert Compare(done, '>=', 800) + Assert Compare(done, '<=', 1000) End End From 396d6664f43e1df04b7dfce6ce87e2a0d3ea0feb Mon Sep 17 00:00:00 2001 From: Tsuyoshi CHO Date: Sat, 16 Mar 2024 22:49:59 +0900 Subject: [PATCH 2/6] fix: Expand range for wait test on mac --- test/Async/Promise.vimspec | 93 ++++++++++++++++++++++++-------------- 1 file changed, 60 insertions(+), 33 deletions(-) diff --git a/test/Async/Promise.vimspec b/test/Async/Promise.vimspec index 704a518c8..e7958b977 100644 --- a/test/Async/Promise.vimspec +++ b/test/Async/Promise.vimspec @@ -794,28 +794,42 @@ Describe Async.Promise Assert Equals(p._state, PENDING) " Timer accuracy fixing need Assert Equals(P.wait(p, { 'interval': 200 }), ['resolved', v:null]) - let done = reltimefloat(reltime(s)) * 1000 - " interval period | 1 | 2 | 3 | 4 | 5 | 6 - " elapsed time |* 0 |* 200 |* 400 |* 600 |* 800 |* 1000 - " detect time range | +------+ - " complete timing |---------------o 500 - " lower limit : 600, upper limit : 800 - Assert Compare(done, '>=', 600) - Assert Compare(done, '<=', 800) + if has('mac') + " Because of unstable result time on mac, we will expand the judgment range for the time test + " It underflows and overflows. + Assert Compare(done, '>=', 400) + Assert Compare(done, '<=', 1000) + else + let done = reltimefloat(reltime(s)) * 1000 + " interval period | 1 | 2 | 3 | 4 | 5 | 6 + " elapsed time |* 0 |* 200 |* 400 |* 600 |* 800 |* 1000 + " detect time range | +------+ + " complete timing |---------------o 500 + " lower limit : 600, upper limit : 800 + Assert Compare(done, '>=', 600) + Assert Compare(done, '<=', 800) + endif let p = Wait(700).then({ -> 'resolved' }) let s = reltime() Assert Equals(p._state, PENDING) " Timer accuracy fixing need Assert Equals(P.wait(p, { 'interval': 200 }), ['resolved', v:null]) - let done = reltimefloat(reltime(s)) * 1000 - " interval period | 1 | 2 | 3 | 4 | 5 | 6 - " elapsed time |* 0 |* 200 |* 400 |* 600 |* 800 |* 1000 - " detect time range | +------+ - " complete timing |----------------------o 700 - " lower limit : 800, upper limit : 1000 - Assert Compare(done, '>=', 800) - Assert Compare(done, '<=', 1000) + if has('mac') + " Because of unstable result time on mac, we will expand the judgment range for the time test + " It underflows and overflows. + Assert Compare(done, '>=', 600) + Assert Compare(done, '<=', 1200) + else + let done = reltimefloat(reltime(s)) * 1000 + " interval period | 1 | 2 | 3 | 4 | 5 | 6 + " elapsed time |* 0 |* 200 |* 400 |* 600 |* 800 |* 1000 + " detect time range | +------+ + " complete timing |----------------------o 700 + " lower limit : 800, upper limit : 1000 + Assert Compare(done, '>=', 800) + Assert Compare(done, '<=', 1000) + endif End It waits within interval range ((interval * n) <= epoch <= (interval * (n + 1))), rejected pattern @@ -824,29 +838,42 @@ Describe Async.Promise Assert Equals(p._state, PENDING) " Timer accuracy fixing need Assert Equals(P.wait(p, { 'interval': 200 }), [v:null, 'rejected']) - let done = reltimefloat(reltime(s)) * 1000 - " interval period | 1 | 2 | 3 | 4 | 5 | 6 - " elapsed time |* 0 |* 200 |* 400 |* 600 |* 800 |* 1000 - " detect time range | +------+ - " complete timing |---------------o 500 - " lower limit : 600, upper limit : 800 - Assert Compare(done, '>=', 600) - Assert Compare(done, '<=', 800) - + if has('mac') + " Because of unstable result time on mac, we will expand the judgment range for the time test + " It underflows and overflows. + Assert Compare(done, '>=', 400) + Assert Compare(done, '<=', 1000) + else + let done = reltimefloat(reltime(s)) * 1000 + " interval period | 1 | 2 | 3 | 4 | 5 | 6 + " elapsed time |* 0 |* 200 |* 400 |* 600 |* 800 |* 1000 + " detect time range | +------+ + " complete timing |---------------o 500 + " lower limit : 600, upper limit : 800 + Assert Compare(done, '>=', 600) + Assert Compare(done, '<=', 800) + endif let p = Wait(700).then({ -> P.reject('rejected') }) let s = reltime() Assert Equals(p._state, PENDING) " Timer accuracy fixing need Assert Equals(P.wait(p, { 'interval': 200 }), [v:null, 'rejected']) - let done = reltimefloat(reltime(s)) * 1000 - " interval period | 1 | 2 | 3 | 4 | 5 | 6 - " elapsed time |* 0 |* 200 |* 400 |* 600 |* 800 |* 1000 - " detect time range | +------+ - " complete timing |----------------------o 700 - " lower limit : 800, upper limit : 1000 - Assert Compare(done, '>=', 800) - Assert Compare(done, '<=', 1000) + if has('mac') + " Because of unstable result time on mac, we will expand the judgment range for the time test + " It underflows and overflows. + Assert Compare(done, '>=', 600) + Assert Compare(done, '<=', 1200) + else + let done = reltimefloat(reltime(s)) * 1000 + " interval period | 1 | 2 | 3 | 4 | 5 | 6 + " elapsed time |* 0 |* 200 |* 400 |* 600 |* 800 |* 1000 + " detect time range | +------+ + " complete timing |----------------------o 700 + " lower limit : 800, upper limit : 1000 + Assert Compare(done, '>=', 800) + Assert Compare(done, '<=', 1000) + endif End End From 2e3e418695bbcc1774df1c8eb9641363dac6b8e0 Mon Sep 17 00:00:00 2001 From: Tsuyoshi CHO Date: Sat, 16 Mar 2024 22:53:40 +0900 Subject: [PATCH 3/6] fix: test miss (done time) --- test/Async/Promise.vimspec | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/Async/Promise.vimspec b/test/Async/Promise.vimspec index e7958b977..1d48a91e4 100644 --- a/test/Async/Promise.vimspec +++ b/test/Async/Promise.vimspec @@ -794,13 +794,13 @@ Describe Async.Promise Assert Equals(p._state, PENDING) " Timer accuracy fixing need Assert Equals(P.wait(p, { 'interval': 200 }), ['resolved', v:null]) + let done = reltimefloat(reltime(s)) * 1000 if has('mac') " Because of unstable result time on mac, we will expand the judgment range for the time test " It underflows and overflows. Assert Compare(done, '>=', 400) Assert Compare(done, '<=', 1000) else - let done = reltimefloat(reltime(s)) * 1000 " interval period | 1 | 2 | 3 | 4 | 5 | 6 " elapsed time |* 0 |* 200 |* 400 |* 600 |* 800 |* 1000 " detect time range | +------+ @@ -815,13 +815,13 @@ Describe Async.Promise Assert Equals(p._state, PENDING) " Timer accuracy fixing need Assert Equals(P.wait(p, { 'interval': 200 }), ['resolved', v:null]) + let done = reltimefloat(reltime(s)) * 1000 if has('mac') " Because of unstable result time on mac, we will expand the judgment range for the time test " It underflows and overflows. Assert Compare(done, '>=', 600) Assert Compare(done, '<=', 1200) else - let done = reltimefloat(reltime(s)) * 1000 " interval period | 1 | 2 | 3 | 4 | 5 | 6 " elapsed time |* 0 |* 200 |* 400 |* 600 |* 800 |* 1000 " detect time range | +------+ @@ -838,13 +838,13 @@ Describe Async.Promise Assert Equals(p._state, PENDING) " Timer accuracy fixing need Assert Equals(P.wait(p, { 'interval': 200 }), [v:null, 'rejected']) + let done = reltimefloat(reltime(s)) * 1000 if has('mac') " Because of unstable result time on mac, we will expand the judgment range for the time test " It underflows and overflows. Assert Compare(done, '>=', 400) Assert Compare(done, '<=', 1000) else - let done = reltimefloat(reltime(s)) * 1000 " interval period | 1 | 2 | 3 | 4 | 5 | 6 " elapsed time |* 0 |* 200 |* 400 |* 600 |* 800 |* 1000 " detect time range | +------+ @@ -859,13 +859,13 @@ Describe Async.Promise Assert Equals(p._state, PENDING) " Timer accuracy fixing need Assert Equals(P.wait(p, { 'interval': 200 }), [v:null, 'rejected']) + let done = reltimefloat(reltime(s)) * 1000 if has('mac') " Because of unstable result time on mac, we will expand the judgment range for the time test " It underflows and overflows. Assert Compare(done, '>=', 600) Assert Compare(done, '<=', 1200) else - let done = reltimefloat(reltime(s)) * 1000 " interval period | 1 | 2 | 3 | 4 | 5 | 6 " elapsed time |* 0 |* 200 |* 400 |* 600 |* 800 |* 1000 " detect time range | +------+ From e7802764c93e0e0dc0eeaae6eb788bb2a078a240 Mon Sep 17 00:00:00 2001 From: Tsuyoshi CHO Date: Sat, 16 Mar 2024 23:05:35 +0900 Subject: [PATCH 4/6] chore: Update comment position --- test/Async/Promise.vimspec | 40 +++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/test/Async/Promise.vimspec b/test/Async/Promise.vimspec index 1d48a91e4..3f14b6a45 100644 --- a/test/Async/Promise.vimspec +++ b/test/Async/Promise.vimspec @@ -795,17 +795,17 @@ Describe Async.Promise " Timer accuracy fixing need Assert Equals(P.wait(p, { 'interval': 200 }), ['resolved', v:null]) let done = reltimefloat(reltime(s)) * 1000 + " interval period | 1 | 2 | 3 | 4 | 5 | 6 + " elapsed time |* 0 |* 200 |* 400 |* 600 |* 800 |* 1000 + " detect time range | +------+ + " complete timing |---------------o 500 + " lower limit : 600, upper limit : 800 if has('mac') " Because of unstable result time on mac, we will expand the judgment range for the time test " It underflows and overflows. Assert Compare(done, '>=', 400) Assert Compare(done, '<=', 1000) else - " interval period | 1 | 2 | 3 | 4 | 5 | 6 - " elapsed time |* 0 |* 200 |* 400 |* 600 |* 800 |* 1000 - " detect time range | +------+ - " complete timing |---------------o 500 - " lower limit : 600, upper limit : 800 Assert Compare(done, '>=', 600) Assert Compare(done, '<=', 800) endif @@ -816,17 +816,17 @@ Describe Async.Promise " Timer accuracy fixing need Assert Equals(P.wait(p, { 'interval': 200 }), ['resolved', v:null]) let done = reltimefloat(reltime(s)) * 1000 + " interval period | 1 | 2 | 3 | 4 | 5 | 6 + " elapsed time |* 0 |* 200 |* 400 |* 600 |* 800 |* 1000 + " detect time range | +------+ + " complete timing |----------------------o 700 + " lower limit : 800, upper limit : 1000 if has('mac') " Because of unstable result time on mac, we will expand the judgment range for the time test " It underflows and overflows. Assert Compare(done, '>=', 600) Assert Compare(done, '<=', 1200) else - " interval period | 1 | 2 | 3 | 4 | 5 | 6 - " elapsed time |* 0 |* 200 |* 400 |* 600 |* 800 |* 1000 - " detect time range | +------+ - " complete timing |----------------------o 700 - " lower limit : 800, upper limit : 1000 Assert Compare(done, '>=', 800) Assert Compare(done, '<=', 1000) endif @@ -839,17 +839,17 @@ Describe Async.Promise " Timer accuracy fixing need Assert Equals(P.wait(p, { 'interval': 200 }), [v:null, 'rejected']) let done = reltimefloat(reltime(s)) * 1000 + " interval period | 1 | 2 | 3 | 4 | 5 | 6 + " elapsed time |* 0 |* 200 |* 400 |* 600 |* 800 |* 1000 + " detect time range | +------+ + " complete timing |---------------o 500 + " lower limit : 600, upper limit : 800 if has('mac') " Because of unstable result time on mac, we will expand the judgment range for the time test " It underflows and overflows. Assert Compare(done, '>=', 400) Assert Compare(done, '<=', 1000) else - " interval period | 1 | 2 | 3 | 4 | 5 | 6 - " elapsed time |* 0 |* 200 |* 400 |* 600 |* 800 |* 1000 - " detect time range | +------+ - " complete timing |---------------o 500 - " lower limit : 600, upper limit : 800 Assert Compare(done, '>=', 600) Assert Compare(done, '<=', 800) endif @@ -860,17 +860,17 @@ Describe Async.Promise " Timer accuracy fixing need Assert Equals(P.wait(p, { 'interval': 200 }), [v:null, 'rejected']) let done = reltimefloat(reltime(s)) * 1000 + " interval period | 1 | 2 | 3 | 4 | 5 | 6 + " elapsed time |* 0 |* 200 |* 400 |* 600 |* 800 |* 1000 + " detect time range | +------+ + " complete timing |----------------------o 700 + " lower limit : 800, upper limit : 1000 if has('mac') " Because of unstable result time on mac, we will expand the judgment range for the time test " It underflows and overflows. Assert Compare(done, '>=', 600) Assert Compare(done, '<=', 1200) else - " interval period | 1 | 2 | 3 | 4 | 5 | 6 - " elapsed time |* 0 |* 200 |* 400 |* 600 |* 800 |* 1000 - " detect time range | +------+ - " complete timing |----------------------o 700 - " lower limit : 800, upper limit : 1000 Assert Compare(done, '>=', 800) Assert Compare(done, '<=', 1000) endif From 3398352ba922f9b253ef96d8b59a2aa767eb3e44 Mon Sep 17 00:00:00 2001 From: Tsuyoshi CHO Date: Sun, 17 Mar 2024 08:38:49 +0900 Subject: [PATCH 5/6] fix: Update comment by review suggestion Co-authored-by: ujihisa --- test/Async/Promise.vimspec | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/Async/Promise.vimspec b/test/Async/Promise.vimspec index 3f14b6a45..9544b35ff 100644 --- a/test/Async/Promise.vimspec +++ b/test/Async/Promise.vimspec @@ -788,7 +788,7 @@ Describe Async.Promise Assert Compare(done, '<=', 2000) End - It waits within interval range ((interval * n) <= epoch <= (interval * (n + 1))), resolved pattern + It waits within the interval range ((interval * n) <= epoch <= (interval * (n + 1))) until resolve let p = Wait(500).then({ -> 'resolved' }) let s = reltime() Assert Equals(p._state, PENDING) @@ -801,8 +801,8 @@ Describe Async.Promise " complete timing |---------------o 500 " lower limit : 600, upper limit : 800 if has('mac') - " Because of unstable result time on mac, we will expand the judgment range for the time test - " It underflows and overflows. + " Because the time required for a result is not stable on mac, we will expand the wait time range to test the time test + " It can either underflow or overflow. Assert Compare(done, '>=', 400) Assert Compare(done, '<=', 1000) else @@ -832,7 +832,7 @@ Describe Async.Promise endif End - It waits within interval range ((interval * n) <= epoch <= (interval * (n + 1))), rejected pattern + It waits within the interval range ((interval * n) <= epoch <= (interval * (n + 1))), until reject let p = Wait(500).then({ -> P.reject('rejected') }) let s = reltime() Assert Equals(p._state, PENDING) From a74118edb40b7bd79c91795a78f113bfa3f785b7 Mon Sep 17 00:00:00 2001 From: Tsuyoshi CHO Date: Sun, 17 Mar 2024 08:38:49 +0900 Subject: [PATCH 6/6] fix: Update comment by review suggestion Apply similar change to other comments. Co-authored-by: ujihisa --- test/Async/Promise.vimspec | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/Async/Promise.vimspec b/test/Async/Promise.vimspec index 9544b35ff..fe064e055 100644 --- a/test/Async/Promise.vimspec +++ b/test/Async/Promise.vimspec @@ -822,8 +822,8 @@ Describe Async.Promise " complete timing |----------------------o 700 " lower limit : 800, upper limit : 1000 if has('mac') - " Because of unstable result time on mac, we will expand the judgment range for the time test - " It underflows and overflows. + " Because the time required for a result is not stable on mac, we will expand the wait time range to test the time test + " It can either underflow or overflow. Assert Compare(done, '>=', 600) Assert Compare(done, '<=', 1200) else @@ -845,8 +845,8 @@ Describe Async.Promise " complete timing |---------------o 500 " lower limit : 600, upper limit : 800 if has('mac') - " Because of unstable result time on mac, we will expand the judgment range for the time test - " It underflows and overflows. + " Because the time required for a result is not stable on mac, we will expand the wait time range to test the time test + " It can either underflow or overflow. Assert Compare(done, '>=', 400) Assert Compare(done, '<=', 1000) else @@ -866,8 +866,8 @@ Describe Async.Promise " complete timing |----------------------o 700 " lower limit : 800, upper limit : 1000 if has('mac') - " Because of unstable result time on mac, we will expand the judgment range for the time test - " It underflows and overflows. + " Because the time required for a result is not stable on mac, we will expand the wait time range to test the time test + " It can either underflow or overflow. Assert Compare(done, '>=', 600) Assert Compare(done, '<=', 1200) else