Skip to content

Commit 356de34

Browse files
feat(#1061): Update integer representation from 'int' to 'number' in codebase
1 parent cdd1e7d commit 356de34

File tree

11 files changed

+84
-19
lines changed

11 files changed

+84
-19
lines changed

src/it/phi-unphi/verify.groovy

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ import java.nio.file.Files
77
String log = new File(basedir, 'build.log').text;
88
assert log.contains("BUILD SUCCESS"): assertionMessage("BUILD FAILED")
99
assert log.contains("sin(42.000000) = -0.916522"): assertionMessage("sin(42.000000) = -0.916522 not found")
10-
assert log.contains("We have the field with the unicode character 'Φ'"): assertionMessage("We can't find the field with the unicode character 'Φ'")
10+
assert new File(basedir, "target/generated-sources/eo-phi/org/eolang/hone/App.phi").text
11+
.contains("Φ.jeo.opcode.dup(89)"): assertionMessage("We can't find the correct PHI integer representation")
1112

1213
private String assertionMessage(String message) {
1314
generateGitHubIssue()

src/main/java/org/eolang/jeo/representation/bytecode/DataType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ enum DataType {
3737
/**
3838
* Integer.
3939
*/
40-
INT("int", Integer.class),
40+
INT("number", Integer.class),
4141

4242
/**
4343
* Long.

src/main/java/org/eolang/jeo/representation/directives/DirectivesNumber.java

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,37 @@ final class DirectivesNumber implements Iterable<Directive> {
1919
*/
2020
private final String hex;
2121

22+
/**
23+
* Name of the number.
24+
*/
25+
private final String name;
26+
2227
/**
2328
* Constructor.
2429
* @param hex Hex number.
2530
*/
2631
DirectivesNumber(final String hex) {
32+
this("", hex);
33+
}
34+
35+
/**
36+
* Constructor.
37+
*
38+
* @param name Name of the number.
39+
* @param hex Hex number.
40+
*/
41+
DirectivesNumber(final String name, final String hex) {
2742
this.hex = hex;
43+
this.name = name;
2844
}
2945

3046
@Override
3147
public Iterator<Directive> iterator() {
32-
return new Directives()
33-
.add("o")
48+
final Directives number = new Directives().add("o");
49+
if (!this.name.isEmpty()) {
50+
number.attr("as", this.name);
51+
}
52+
return number
3453
.attr("base", new EoFqn("number").fqn())
3554
.append(new DirectivesBytes(this.hex))
3655
.up()

src/main/java/org/eolang/jeo/representation/directives/DirectivesValue.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
* @since 0.1.0
1919
*/
2020
@ToString
21+
@SuppressWarnings("PMD.TooManyMethods")
2122
public final class DirectivesValue implements Iterable<Directive> {
2223

2324
/**
@@ -92,9 +93,11 @@ public Iterator<Directive> iterator() {
9293
final Iterable<Directive> res;
9394
final Codec codec = DirectivesValue.CODEC;
9495
switch (type) {
96+
case "number":
97+
res = this.integerNumber(codec);
98+
break;
9599
case "byte":
96100
case "short":
97-
case "int":
98101
case "float":
99102
case "double":
100103
res = this.jeoNumber(type, codec);
@@ -180,6 +183,19 @@ private DirectivesJeoObject jeoObject(final String base, final Codec codec) {
180183
);
181184
}
182185

186+
/**
187+
* Integer number object.
188+
* We decided to use simplified representation of integer numbers.
189+
* Previously, we used {@link #jeoNumber(String, Codec)} wrapper.
190+
* You can read about it here:
191+
* <a href="https://github.com/objectionary/jeo-maven-plugin/issues/1061">#1061</a>
192+
* @param codec Codec to use for bytes encoding.
193+
* @return JEO number directives.
194+
*/
195+
private Iterable<Directive> integerNumber(final Codec codec) {
196+
return new DirectivesNumber(this.name, this.hex(codec));
197+
}
198+
183199
/**
184200
* JEO number.
185201
*

src/test/java/org/eolang/jeo/representation/bytecode/BytecodeObjectTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ static Stream<Arguments> arguments() {
5959
return Stream.of(
6060
Arguments.of(
6161
new BytecodeObject(42),
62-
"int",
62+
"number",
6363
new byte[]{0, 0, 0, 0, 0, 0, 0, 42},
6464
42
6565
),

src/test/java/org/eolang/jeo/representation/directives/DirectivesClassPropertiesTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ void createsDirectives() throws ImpossibleModificationException {
3434
).up()
3535
).xml(),
3636
XhtmlMatchers.hasXPaths(
37-
"/o/o[contains(@base,'jeo.int') and contains(@as,'version')]",
38-
"/o/o[contains(@base,'jeo.int') and contains(@as,'access')]",
37+
"/o/o[contains(@base,'number') and contains(@as,'version')]",
38+
"/o/o[contains(@base,'number') and contains(@as,'access')]",
3939
"/o/o[contains(@base,'org.eolang.string') and contains(@as,'signature')]",
4040
"/o/o[contains(@base,'org.eolang.string') and contains(@as,'supername')]",
4141
"/o/o[contains(@base,'jeo.seq.of1') and contains(@as,'interfaces')]"

src/test/java/org/eolang/jeo/representation/directives/DirectivesFieldTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ void convertsDefaultFieldToDirectives() throws ImpossibleModificationException {
3434
"/o/o[@as='access-unknown']",
3535
"/o/o[@as='descriptor-unknown']",
3636
"/o/o[@as='signature-unknown']",
37-
"/o/o[contains(@base,'int') and @as='value-unknown']"
37+
"/o/o[contains(@base,'number') and @as='value-unknown']"
3838
)
3939
);
4040
}

src/test/java/org/eolang/jeo/representation/directives/DirectivesHandleTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ void convertsHandleToDirectives() throws ImpossibleModificationException {
3131
xml,
3232
XhtmlMatchers.hasXPaths(
3333
"/o[contains(@base,'handle')]",
34-
"/o[contains(@base,'handle')]/o[contains(@base,'int')]",
34+
"/o[contains(@base,'handle')]/o[contains(@base,'number')]",
3535
"/o[contains(@base,'handle')]/o[contains(@base,'string')]"
3636
)
3737
);

src/test/java/org/eolang/jeo/representation/directives/DirectivesValueTest.java

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ void convertsInteger() throws ImpossibleModificationException {
4242
),
4343
xml,
4444
XhtmlMatchers.hasXPath(
45-
"./o[contains(@base,'jeo.int') and @as='access']/o[contains(@base,'number')]/o[contains(@base, 'bytes')]/text()"
45+
"./o[contains(@base,'number') and @as='access']/o[contains(@base, 'bytes')]/text()"
4646
)
4747
);
4848
}
@@ -67,6 +67,25 @@ void convertsNumbers(final Number number, final String base, final String bytes)
6767
);
6868
}
6969

70+
@ParameterizedTest
71+
@MethodSource("integers")
72+
void convertsIntegers(final Number number, final String bytes) {
73+
final String xml = new Xembler(new DirectivesValue("access", number)).xmlQuietly();
74+
MatcherAssert.assertThat(
75+
String.format(
76+
"We expect that integer value is converted to the correct XMIR, but got the incorrect one: %n%s%n",
77+
xml
78+
),
79+
xml,
80+
XhtmlMatchers.hasXPath(
81+
String.format(
82+
"./o[contains(@base,'number') and @as='access']/o[contains(@base,'bytes')]/o[text()='%s']",
83+
bytes
84+
)
85+
)
86+
);
87+
}
88+
7089
@Test
7190
void convertsLabel() throws ImpossibleModificationException {
7291
MatcherAssert.assertThat(
@@ -178,7 +197,7 @@ void createsStringWithQuotedComment() throws ImpossibleModificationException {
178197
*/
179198
static Stream<Arguments> types() {
180199
return Stream.of(
181-
Arguments.of(1, "int"),
200+
Arguments.of(1, "number"),
182201
Arguments.of("Hello!", "string"),
183202
Arguments.of(new byte[]{1, 2, 3}, "bytes"),
184203
Arguments.of(new byte[0], "bytes"),
@@ -218,14 +237,24 @@ static Stream<Arguments> values() {
218237
static Stream<Arguments> numbers() {
219238
final String same = "3F-F0-00-00-00-00-00-00";
220239
return Stream.of(
221-
Arguments.of(1, "jeo.int", same),
222240
Arguments.of(1L, "jeo.long", same),
223241
Arguments.of(1.0f, "jeo.float", same),
224242
Arguments.of(1.0d, "jeo.double", same),
225243
Arguments.of((short) 1, "jeo.short", same),
226-
Arguments.of((byte) 1, "jeo.byte", same),
227-
Arguments.of(100, "jeo.int", "40-59-00-00-00-00-00-00"),
228-
Arguments.of(1057, "jeo.int", "40-90-84-00-00-00-00-00")
244+
Arguments.of((byte) 1, "jeo.byte", same)
245+
);
246+
}
247+
248+
/**
249+
* Arguments for {@link DirectivesValueTest#convertsIntegers(Number, String)} (Number, String)}.
250+
* @return Stream of arguments.
251+
*/
252+
static Stream<Arguments> integers() {
253+
final String same = "3F-F0-00-00-00-00-00-00";
254+
return Stream.of(
255+
Arguments.of(1, same),
256+
Arguments.of(100, "40-59-00-00-00-00-00-00"),
257+
Arguments.of(1057, "40-90-84-00-00-00-00-00")
229258
);
230259
}
231260
}

src/test/java/org/eolang/jeo/representation/directives/HasMethod.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ Stream<String> checks(final String root) {
285285
Stream.of(
286286
instruction.concat("/@base"),
287287
String.format(
288-
"%s/o[contains(@base,'int')]/o[contains(@base,'number')]/o[contains(@base,'bytes')]/o[text()='%s']/text()",
288+
"%s/o[contains(@base,'number')]/o[contains(@base,'bytes')]/o[text()='%s']/text()",
289289
instruction,
290290
new DirectivesValue((double) this.opcode).hex(new JavaCodec())
291291
)
@@ -312,7 +312,7 @@ private Stream<String> arguments(final String instruction) {
312312
((Number) arg).doubleValue()
313313
);
314314
result = String.format(
315-
"%s/o[contains(@base,'%s')]/o[contains(@base,'number')]/o[contains(@base,'bytes')]/o[text()='%s']/text()",
315+
"%s/o[contains(@base,'%s')]/o[contains(@base,'bytes')]/o[text()='%s']/text()",
316316
instruction,
317317
simple.type(),
318318
hex.hex(new JavaCodec())

0 commit comments

Comments
 (0)