-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtestArithmeticGroup.cpp
More file actions
117 lines (100 loc) · 2.95 KB
/
testArithmeticGroup.cpp
File metadata and controls
117 lines (100 loc) · 2.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include "testArithmeticGroup.hpp"
#include "Assembler.hpp"
#include "MachineCode.hpp"
#include "argumentHelpers.hpp"
#include "testUtilities.hpp"
namespace {
void testAddHlBc() {
Assembler assembler;
assembler.command2("add", identifierArg("hl"), identifierArg("bc"));
Byte expectedBytes[] = { 0b00001001 };
isEqualToBytes(assembler, expectedBytes, 1);
}
void testAdd_ix_sp() {
Assembler assembler;
assembler.command2("add", identifierArg("ix"), identifierArg("sp"));
Byte expectedBytes[] = { 0xdd, 0x39 };
isEqualToBytes(assembler, expectedBytes, 2);
}
void testAdd_A_nn() {
Assembler assembler;
assembler.command2("add", identifierArg("a"), numberArg(123));
Byte expectedBytes[] = { 0xc6, 123 };
isEqualToBytes(assembler, expectedBytes, 2);
}
void testAdd_a_ix_indexed() {
Assembler assembler;
assembler.command2("add", identifierArg("a"), dereferencedIndexedIdentifierArg("ix", 2));
Byte expectedBytes[] = { 0xdd, 0x86, 2 };
isEqualToBytes(assembler, expectedBytes, 3);
}
void testAdd_a_iy_indexed() {
Assembler assembler;
assembler.command2("add", identifierArg("a"), dereferencedIndexedIdentifierArg("iy", 2));
Byte expectedBytes[] = { 0xfd, 0x86, 2 };
isEqualToBytes(assembler, expectedBytes, 3);
}
void testSbc_hl_ss() {
Assembler assembler;
assembler.command2("sbc", identifierArg("hl"), identifierArg("de"));
Byte expectedBytes[] = { 0xed, 0x52 };
isEqualToBytes(assembler, expectedBytes, 2);
}
void testOr() {
Assembler assembler;
assembler.command1("or", identifierArg("a"));
Byte expectedBytes[] = { 0b10110111 };
isEqualToBytes(assembler, expectedBytes, 1);
}
void testAnd_nn() {
Assembler assembler;
assembler.command1("and", numberArg(0x13));
Byte expectedBytes[] = { 0xe6, 0x13 };
isEqualToBytes(assembler, expectedBytes, 2);
}
void testSrl() {
Assembler assembler;
assembler.command1("srl", identifierArg("c"));
Byte expectedBytes[] = { 0xcb, 0b00111001 };
isEqualToBytes(assembler, expectedBytes, 2);
}
void testInc_ix() {
Assembler assembler;
assembler.command1("inc", identifierArg("ix"));
Byte expectedBytes[] = { 0xdd, 0x23 };
isEqualToBytes(assembler, expectedBytes, 2);
}
void testInc_iy() {
Assembler assembler;
assembler.command1("inc", identifierArg("iy"));
Byte expectedBytes[] = { 0xfd, 0x23 };
isEqualToBytes(assembler, expectedBytes, 2);
}
void testDec_ss() {
Assembler assembler;
assembler.command1("dec", identifierArg("sp"));
Byte expectedBytes[] = { 0b00111011 };
isEqualToBytes(assembler, expectedBytes, 1);
}
void testDec_r() {
Assembler assembler;
assembler.command1("dec", identifierArg("a"));
Byte expectedBytes[] = { 0b00111101 };
isEqualToBytes(assembler, expectedBytes, 1);
}
} // unnamed namespace
void testArithmeticGroup() {
testAdd_A_nn();
testAdd_ix_sp();
testAddHlBc();
testAdd_a_ix_indexed();
testAdd_a_iy_indexed();
testSbc_hl_ss();
testOr();
testAnd_nn();
testSrl();
testInc_ix();
testInc_iy();
testDec_r();
testDec_ss();
}