diff --git a/src/blocks/scratch3_control.js b/src/blocks/scratch3_control.js index ae4110a5..dd4d83c1 100644 --- a/src/blocks/scratch3_control.js +++ b/src/blocks/scratch3_control.js @@ -49,7 +49,7 @@ class Scratch3ControlBlocks { } repeat (args, util) { - const times = Math.floor(Cast.toNumber(args.TIMES)); + const times = Math.round(Cast.toNumber(args.TIMES)); // Initialize loop if (typeof util.stackFrame.loopCounter === 'undefined') { util.stackFrame.loopCounter = times; diff --git a/test/unit/blocks_control.js b/test/unit/blocks_control.js index 896e444b..aed0ebd1 100644 --- a/test/unit/blocks_control.js +++ b/test/unit/blocks_control.js @@ -31,6 +31,33 @@ test('repeat', t => { t.end(); }); +test('repeat rounds with round()', t => { + const rt = new Runtime(); + const c = new Control(rt); + + const roundingTest = (inputForRepeat, expectedTimes) => { + // Test harness (mocks `util`) + let i = 0; + const util = { + stackFrame: Object.create(null), + startBranch: function () { + i++; + c.repeat({TIMES: inputForRepeat}, util); + } + }; + + // Execute test + c.repeat({TIMES: inputForRepeat}, util); + t.strictEqual(i, expectedTimes); + }; + + // Execute tests + roundingTest(3.2, 3); + roundingTest(3.7, 4); + roundingTest(3.5, 4); + t.end(); +}); + test('repeatUntil', t => { const rt = new Runtime(); const c = new Control(rt);