Skip to content

Commit a83dae7

Browse files
committed
Compiler: Add createRandom() method
1 parent 0ef6a2b commit a83dae7

File tree

3 files changed

+26
-0
lines changed

3 files changed

+26
-0
lines changed

include/scratchcpp/dev/compiler.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ class LIBSCRATCHCPP_EXPORT Compiler
6565
CompilerValue *createMul(CompilerValue *operand1, CompilerValue *operand2);
6666
CompilerValue *createDiv(CompilerValue *operand1, CompilerValue *operand2);
6767

68+
CompilerValue *createRandom(CompilerValue *from, CompilerValue *to);
69+
6870
CompilerValue *createCmpEQ(CompilerValue *operand1, CompilerValue *operand2);
6971
CompilerValue *createCmpGT(CompilerValue *operand1, CompilerValue *operand2);
7072
CompilerValue *createCmpLT(CompilerValue *operand1, CompilerValue *operand2);

src/dev/engine/compiler.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,12 @@ CompilerValue *Compiler::createDiv(CompilerValue *operand1, CompilerValue *opera
193193
return impl->builder->createDiv(operand1, operand2);
194194
}
195195

196+
/*! Creates a random instruction (Scratch behavior). */
197+
CompilerValue *Compiler::createRandom(CompilerValue *from, CompilerValue *to)
198+
{
199+
return impl->builder->createRandom(from, to);
200+
}
201+
196202
/*! Creates an equality comparison instruction. */
197203
CompilerValue *Compiler::createCmpEQ(CompilerValue *operand1, CompilerValue *operand2)
198204
{

test/dev/compiler/compiler_test.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -466,6 +466,24 @@ TEST_F(CompilerTest, CreateDiv)
466466
compile(compiler, block);
467467
}
468468

469+
TEST_F(CompilerTest, CreateRandom)
470+
{
471+
Compiler compiler(&m_engine, &m_target);
472+
auto block = std::make_shared<Block>("", "");
473+
474+
block->setCompileFunction([](Compiler *compiler) -> CompilerValue * {
475+
CompilerValue arg1(Compiler::StaticType::Unknown);
476+
CompilerValue arg2(Compiler::StaticType::Unknown);
477+
CompilerValue ret(Compiler::StaticType::Unknown);
478+
EXPECT_CALL(*m_builder, createRandom(&arg1, &arg2)).WillOnce(Return(&ret));
479+
EXPECT_EQ(compiler->createRandom(&arg1, &arg2), &ret);
480+
481+
return nullptr;
482+
});
483+
484+
compile(compiler, block);
485+
}
486+
469487
TEST_F(CompilerTest, CreateCmpEQ)
470488
{
471489
Compiler compiler(&m_engine, &m_target);

0 commit comments

Comments
 (0)