Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1104)

Unified Diff: courgette/adjustment_method_unittest.cc

Issue 2462993003: [Courgette] Refactor: Add and use Instruction*Receptor classes; call ParseFile() in 2 passes. (Closed)
Patch Set: Fix comments. Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | courgette/assembly_program.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: courgette/adjustment_method_unittest.cc
diff --git a/courgette/adjustment_method_unittest.cc b/courgette/adjustment_method_unittest.cc
index d8b987c2d89e1ac6be8abe036bfa13f72f5ea31b..970a652dc8e62631310bab8e4ff612fb6374acce 100644
--- a/courgette/adjustment_method_unittest.cc
+++ b/courgette/adjustment_method_unittest.cc
@@ -7,6 +7,7 @@
#include <utility>
#include <vector>
+#include "base/bind.h"
#include "base/strings/string_util.h"
#include "courgette/assembly_program.h"
#include "courgette/courgette.h"
@@ -16,6 +17,10 @@
#include "testing/gtest/include/gtest/gtest.h"
+namespace courgette {
+
+namespace {
+
class AdjustmentMethodTest : public testing::Test {
public:
void Test1() const;
@@ -29,32 +34,39 @@ class AdjustmentMethodTest : public testing::Test {
// Returns one of two similar simple programs. These differ only in Label
// assignment, so it is possible to make them look identical.
- std::unique_ptr<courgette::AssemblyProgram> MakeProgram(int kind) const {
- std::unique_ptr<courgette::AssemblyProgram> prog(
- new courgette::AssemblyProgram(courgette::EXE_WIN_32_X86));
+ std::unique_ptr<AssemblyProgram> MakeProgram(int kind) const {
+ std::unique_ptr<AssemblyProgram> prog(new AssemblyProgram(EXE_WIN_32_X86));
prog->set_image_base(0x00400000);
- courgette::RVA kRvaA = 0x00410000;
- courgette::RVA kRvaB = 0x00410004;
+ RVA kRvaA = 0x00410000;
+ RVA kRvaB = 0x00410004;
- std::vector<courgette::RVA> abs32_rvas;
+ std::vector<RVA> abs32_rvas;
abs32_rvas.push_back(kRvaA);
abs32_rvas.push_back(kRvaB);
- std::vector<courgette::RVA> rel32_rvas; // Stub.
+ std::vector<RVA> rel32_rvas; // Stub.
- courgette::TrivialRvaVisitor abs32_visitor(abs32_rvas);
- courgette::TrivialRvaVisitor rel32_visitor(rel32_rvas);
+ TrivialRvaVisitor abs32_visitor(abs32_rvas);
+ TrivialRvaVisitor rel32_visitor(rel32_rvas);
prog->PrecomputeLabels(&abs32_visitor, &rel32_visitor);
- courgette::Label* labelA = prog->FindAbs32Label(kRvaA);
- courgette::Label* labelB = prog->FindAbs32Label(kRvaB);
+ Label* labelA = prog->FindAbs32Label(kRvaA);
+ Label* labelB = prog->FindAbs32Label(kRvaB);
+
+ AssemblyProgram::InstructionGenerator gen = base::Bind(
+ [](Label* labelA, Label* labelB, AssemblyProgram* prog,
+ InstructionReceptor* receptor) -> CheckBool {
+ EXPECT_TRUE(receptor->EmitAbs32(labelA));
+ EXPECT_TRUE(receptor->EmitAbs32(labelA));
+ EXPECT_TRUE(receptor->EmitAbs32(labelB));
+ EXPECT_TRUE(receptor->EmitAbs32(labelA));
+ EXPECT_TRUE(receptor->EmitAbs32(labelA));
+ EXPECT_TRUE(receptor->EmitAbs32(labelB));
+ return true;
+ },
+ labelA, labelB);
- EXPECT_TRUE(prog->EmitAbs32(labelA));
- EXPECT_TRUE(prog->EmitAbs32(labelA));
- EXPECT_TRUE(prog->EmitAbs32(labelB));
- EXPECT_TRUE(prog->EmitAbs32(labelA));
- EXPECT_TRUE(prog->EmitAbs32(labelA));
- EXPECT_TRUE(prog->EmitAbs32(labelB));
+ EXPECT_TRUE(prog->GenerateInstructions(gen));
if (kind == 0) {
labelA->index_ = 0;
@@ -68,32 +80,30 @@ class AdjustmentMethodTest : public testing::Test {
return prog;
}
- std::unique_ptr<courgette::AssemblyProgram> MakeProgramA() const {
+ std::unique_ptr<AssemblyProgram> MakeProgramA() const {
return MakeProgram(0);
}
- std::unique_ptr<courgette::AssemblyProgram> MakeProgramB() const {
+ std::unique_ptr<AssemblyProgram> MakeProgramB() const {
return MakeProgram(1);
}
// Returns a string that is the serialized version of |program|.
// Deletes |program|.
- std::string Serialize(
- std::unique_ptr<courgette::AssemblyProgram> program) const {
- std::unique_ptr<courgette::EncodedProgram> encoded;
+ std::string Serialize(std::unique_ptr<AssemblyProgram> program) const {
+ std::unique_ptr<EncodedProgram> encoded;
- const courgette::Status encode_status = Encode(*program, &encoded);
- EXPECT_EQ(courgette::C_OK, encode_status);
+ const Status encode_status = Encode(*program, &encoded);
+ EXPECT_EQ(C_OK, encode_status);
program.reset();
- courgette::SinkStreamSet sinks;
- const courgette::Status write_status =
- WriteEncodedProgram(encoded.get(), &sinks);
- EXPECT_EQ(courgette::C_OK, write_status);
+ SinkStreamSet sinks;
+ const Status write_status = WriteEncodedProgram(encoded.get(), &sinks);
+ EXPECT_EQ(C_OK, write_status);
encoded.reset();
- courgette::SinkStream sink;
+ SinkStream sink;
bool can_collect = sinks.CopyTo(&sink);
EXPECT_TRUE(can_collect);
@@ -103,18 +113,18 @@ class AdjustmentMethodTest : public testing::Test {
};
void AdjustmentMethodTest::Test1() const {
- std::unique_ptr<courgette::AssemblyProgram> prog1 = MakeProgramA();
- std::unique_ptr<courgette::AssemblyProgram> prog2 = MakeProgramB();
+ std::unique_ptr<AssemblyProgram> prog1 = MakeProgramA();
+ std::unique_ptr<AssemblyProgram> prog2 = MakeProgramB();
std::string s1 = Serialize(std::move(prog1));
std::string s2 = Serialize(std::move(prog2));
// Don't use EXPECT_EQ because strings are unprintable.
EXPECT_FALSE(s1 == s2); // Unadjusted A and B differ.
- std::unique_ptr<courgette::AssemblyProgram> prog5 = MakeProgramA();
- std::unique_ptr<courgette::AssemblyProgram> prog6 = MakeProgramB();
- courgette::Status can_adjust = Adjust(*prog5, prog6.get());
- EXPECT_EQ(courgette::C_OK, can_adjust);
+ std::unique_ptr<AssemblyProgram> prog5 = MakeProgramA();
+ std::unique_ptr<AssemblyProgram> prog6 = MakeProgramB();
+ Status can_adjust = Adjust(*prog5, prog6.get());
+ EXPECT_EQ(C_OK, can_adjust);
std::string s5 = Serialize(std::move(prog5));
std::string s6 = Serialize(std::move(prog6));
@@ -125,3 +135,7 @@ void AdjustmentMethodTest::Test1() const {
TEST_F(AdjustmentMethodTest, All) {
Test1();
}
+
+} // namespace
+
+} // namespace courgette
« no previous file with comments | « no previous file | courgette/assembly_program.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698