'use strict'; // The goal of this test is to make sure that, after the regression introduced // by 934bfe23a16556d05bfb1844ef4d53e8c9887c3d, the fix preserves the following // behavior of unref timers: if two timers are scheduled to fire at the same // time, if one unenrolls the other one in its _onTimeout callback, the other // one will *not* fire. // This behavior is a private implementation detail and should not be // considered public interface. require('../common'); const timers = require('timers'); const assert = require('assert'); let nbTimersFired = 0; const foo = { _onTimeout: function() { ++nbTimersFired; timers.unenroll(bar); } }; const bar = { _onTimeout: function() { ++nbTimersFired; timers.unenroll(foo); } }; timers.enroll(bar, 1); timers._unrefActive(bar); timers.enroll(foo, 1); timers._unrefActive(foo); setTimeout(function() { assert.notStrictEqual(nbTimersFired, 2); }, 20);