Skip to content

Commit 1e82072

Browse files
authored
Merge pull request #241 from scratchcpp/clear_vm_registers_in_reset
Clear registers in VirtualMachine::reset()
2 parents cd51c0f + 5515d7d commit 1e82072

File tree

3 files changed

+18
-13
lines changed

3 files changed

+18
-13
lines changed

src/engine/virtualmachine.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ void VirtualMachine::reset()
175175
{
176176
assert(impl->bytecode);
177177
impl->pos = impl->bytecode;
178+
impl->regCount = 0;
178179
}
179180

180181
/*! Moves back to the last vm::OP_CHECKPOINT instruction in the bytecode. */

test/blocks/motion_blocks_test.cpp

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -369,12 +369,13 @@ TEST_F(MotionBlocksTest, PointTowardsImpl)
369369
static const std::vector<double> intPosResults = { -101.31, 29.55, -90, 90, 90 };
370370

371371
// point towards (join "_mouse_" "")
372+
vm.setBytecode(bytecode1);
373+
372374
for (int i = 0; i < positions.size(); i++) {
373375
EXPECT_CALL(m_engineMock, mouseX()).WillOnce(Return(positions[i].first));
374376
EXPECT_CALL(m_engineMock, mouseY()).WillOnce(Return(positions[i].second));
375377

376-
// TODO: Move setBytecode() out of the loop and use reset() after task #215 is completed
377-
vm.setBytecode(bytecode1);
378+
vm.reset();
378379
vm.run();
379380

380381
ASSERT_EQ(vm.registerCount(), 0);
@@ -384,15 +385,15 @@ TEST_F(MotionBlocksTest, PointTowardsImpl)
384385
// point towards (join "_random_" "")
385386
sprite.setX(std::round(sprite.x()));
386387
sprite.setY(std::round(sprite.y()));
388+
vm.setBytecode(bytecode2);
387389

388390
for (int i = 0; i < positions.size(); i++) {
389391
EXPECT_CALL(m_engineMock, stageWidth()).WillOnce(Return(640));
390392
EXPECT_CALL(m_engineMock, stageHeight()).WillOnce(Return(500));
391393
EXPECT_CALL(rng, randint(-320, 320)).WillOnce(Return(std::round(positions[i].first)));
392394
EXPECT_CALL(rng, randint(-250, 250)).WillOnce(Return(std::round(positions[i].second)));
393395

394-
// TODO: Move setBytecode() out of the loop and use reset() after task #215 is completed
395-
vm.setBytecode(bytecode2);
396+
vm.reset();
396397
vm.run();
397398

398399
ASSERT_EQ(vm.registerCount(), 0);
@@ -403,43 +404,46 @@ TEST_F(MotionBlocksTest, PointTowardsImpl)
403404
sprite.setY(-100.025);
404405

405406
// point towards (join "Sprite2" "")
407+
vm.setBytecode(bytecode3);
408+
406409
for (int i = 0; i < positions.size(); i++) {
407410
anotherSprite.setX(positions[i].first);
408411
anotherSprite.setY(positions[i].second);
409412

410413
EXPECT_CALL(m_engineMock, findTarget("Sprite2")).WillOnce(Return(3));
411414
EXPECT_CALL(m_engineMock, targetAt(3)).WillOnce(Return(&anotherSprite));
412415

413-
// TODO: Move setBytecode() out of the loop and use reset() after task #215 is completed
414-
vm.setBytecode(bytecode3);
416+
vm.reset();
415417
vm.run();
416418

417419
ASSERT_EQ(vm.registerCount(), 0);
418420
ASSERT_EQ(std::round(sprite.direction() * 100) / 100, results[i]);
419421
}
420422

421423
// point towards (Sprite2)
424+
vm.setBytecode(bytecode4);
425+
422426
for (int i = 0; i < positions.size(); i++) {
423427
anotherSprite.setX(positions[i].first);
424428
anotherSprite.setY(positions[i].second);
425429

426430
EXPECT_CALL(m_engineMock, targetAt(3)).WillOnce(Return(&anotherSprite));
427431

428-
// TODO: Move setBytecode() out of the loop and use reset() after task #215 is completed
429-
vm.setBytecode(bytecode4);
432+
vm.reset();
430433
vm.run();
431434

432435
ASSERT_EQ(vm.registerCount(), 0);
433436
ASSERT_EQ(std::round(sprite.direction() * 100) / 100, results[i]);
434437
}
435438

436439
// point towards (mouse-pointer)
440+
vm.setBytecode(bytecode5);
441+
437442
for (int i = 0; i < positions.size(); i++) {
438443
EXPECT_CALL(m_engineMock, mouseX()).WillOnce(Return(positions[i].first));
439444
EXPECT_CALL(m_engineMock, mouseY()).WillOnce(Return(positions[i].second));
440445

441-
// TODO: Move setBytecode() out of the loop and use reset() after task #215 is completed
442-
vm.setBytecode(bytecode5);
446+
vm.reset();
443447
vm.run();
444448

445449
ASSERT_EQ(vm.registerCount(), 0);
@@ -449,15 +453,15 @@ TEST_F(MotionBlocksTest, PointTowardsImpl)
449453
// point towards (random position)
450454
sprite.setX(std::round(sprite.x()));
451455
sprite.setY(std::round(sprite.y()));
456+
vm.setBytecode(bytecode6);
452457

453458
for (int i = 0; i < positions.size(); i++) {
454459
EXPECT_CALL(m_engineMock, stageWidth()).WillOnce(Return(640));
455460
EXPECT_CALL(m_engineMock, stageHeight()).WillOnce(Return(500));
456461
EXPECT_CALL(rng, randint(-320, 320)).WillOnce(Return(std::round(positions[i].first)));
457462
EXPECT_CALL(rng, randint(-250, 250)).WillOnce(Return(std::round(positions[i].second)));
458463

459-
// TODO: Move setBytecode() out of the loop and use reset() after task #215 is completed
460-
vm.setBytecode(bytecode6);
464+
vm.reset();
461465
vm.run();
462466

463467
ASSERT_EQ(vm.registerCount(), 0);

test/blocks/sensing_blocks_test.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -360,6 +360,6 @@ TEST_F(SensingBlocksTest, DaysSince2000Impl)
360360
vm.run();
361361
SensingBlocks::clock = nullptr;
362362

363-
ASSERT_EQ(vm.registerCount(), 2); // TODO: Change this to 1 after task #215 is completed
363+
ASSERT_EQ(vm.registerCount(), 1);
364364
ASSERT_EQ(vm.getInput(0, 1)->toDouble(), 747.20278428240817);
365365
}

0 commit comments

Comments
 (0)