/
integer.ts
175 lines (157 loc) · 4.17 KB
/
integer.ts
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
import {expect} from "chai";
import {ABAP, MemoryConsole} from "../../packages/runtime/src/";
import {AsyncFunction, runFiles} from "../_utils";
let abap: ABAP;
async function run(contents: string) {
return runFiles(abap, [{filename: "zfoobar.prog.abap", contents}]);
}
describe("Running Examples - Integer type", () => {
beforeEach(async () => {
abap = new ABAP({console: new MemoryConsole()});
});
it("int", async () => {
const code = `
DATA int TYPE i.
int = 2.
WRITE int.`;
const js = await run(code);
const f = new AsyncFunction("abap", js);
await f(abap);
expect(abap.console.get()).to.equal("2");
});
it("int, negative", async () => {
const code = `
DATA int TYPE i.
int = -2.
WRITE int.`;
const js = await run(code);
const f = new AsyncFunction("abap", js);
await f(abap);
expect(abap.console.get()).to.equal("-2");
});
it("int, positive", async () => {
const code = `
DATA int TYPE i.
int = +4.
WRITE int.`;
const js = await run(code);
const f = new AsyncFunction("abap", js);
await f(abap);
expect(abap.console.get()).to.equal("4");
});
it("no thousand separator, design choice?", async () => {
const code = `
DATA int TYPE i.
int = 2000.
WRITE int.`;
const js = await run(code);
const f = new AsyncFunction("abap", js);
await f(abap);
expect(abap.console.get()).to.equal("2000");
});
it("convert plus 1", async () => {
const code = `
DATA int TYPE i.
int = '+1.0'.
WRITE int.`;
const js = await run(code);
const f = new AsyncFunction("abap", js);
await f(abap);
expect(abap.console.get()).to.equal("1");
});
it("output negative via string", async () => {
const code = `
DATA foo TYPE i.
DATA str TYPE string.
foo = -68.
str = foo.
WRITE str.`;
const js = await run(code);
const f = new AsyncFunction("abap", js);
await f(abap);
expect(abap.console.get()).to.equal("68-");
});
it("character spaces", async () => {
const code = `
DATA foo TYPE i.
DATA char TYPE c LENGTH 3.
char = '3 '.
foo = char.`;
const js = await run(code);
const f = new AsyncFunction("abap", js);
await f(abap);
});
it("negative, sign right", async () => {
const code = `
DATA int TYPE i.
int = '100-'.
ASSERT int = -100.`;
const js = await run(code);
const f = new AsyncFunction("abap", js);
await f(abap);
});
it.skip("overflow", async () => {
const code = `
DATA lv_int TYPE i.
lv_int = 2 ** 33.`;
const js = await run(code);
const f = new AsyncFunction("abap", js);
try {
await f(abap);
expect.fail();
} catch(e) {
expect(e.toString()).to.contain("CX_SY_ARITHMETIC_OVERFLOW");
}
});
it("negative to hex1", async () => {
const code = `
DATA int TYPE i VALUE -4242.
DATA hex TYPE x LENGTH 1.
hex = int.
ASSERT hex = '6E'.`;
const js = await run(code);
const f = new AsyncFunction("abap", js);
await f(abap);
});
it("negative to hex2", async () => {
const code = `
DATA int TYPE i VALUE -4242.
DATA hex TYPE x LENGTH 2.
hex = int.
ASSERT hex = 'EF6E'.`;
const js = await run(code);
const f = new AsyncFunction("abap", js);
await f(abap);
});
it("negative to hex3", async () => {
const code = `
DATA int TYPE i VALUE -4242.
DATA hex TYPE x LENGTH 3.
hex = int.
WRITE / hex.`;
const js = await run(code);
const f = new AsyncFunction("abap", js);
await f(abap);
expect(abap.console.get()).to.equal("FFEF6E");
});
it("rounding from char, up", async () => {
const code = `
DATA lv_date_int TYPE i.
lv_date_int = '45141.58832'.
WRITE / lv_date_int.`;
const js = await run(code);
const f = new AsyncFunction("abap", js);
await f(abap);
expect(abap.console.get()).to.equal("45142");
});
it("rounding from char, down", async () => {
const code = `
DATA lv_date_int TYPE i.
lv_date_int = '45141.48832'.
WRITE / lv_date_int.`;
const js = await run(code);
const f = new AsyncFunction("abap", js);
await f(abap);
expect(abap.console.get()).to.equal("45141");
});
});