Skip to content

Commit 9dba1b5

Browse files
authored
[test] Increase code coverage for class GenericRow (#856)
1 parent 0a3dd1e commit 9dba1b5

File tree

4 files changed

+154
-3
lines changed

4 files changed

+154
-3
lines changed

fluss-common/src/main/java/com/alibaba/fluss/row/GenericRow.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import java.util.Arrays;
2424

2525
/**
26-
* An internal data structure representing data of {@link RowType}..
26+
* An internal data structure representing data of {@link RowType}.
2727
*
2828
* <p>{@link GenericRow} is a generic implementation of {@link InternalRow} which is backed by an
2929
* array of Java {@link Object}. A {@link GenericRow} can have an arbitrary number of fields of
Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
/*
2+
* Copyright (c) 2025 Alibaba Group Holding Ltd.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.alibaba.fluss.row;
18+
19+
import org.junit.jupiter.api.Test;
20+
21+
import java.math.BigDecimal;
22+
23+
import static org.assertj.core.api.Assertions.assertThat;
24+
import static org.assertj.core.api.Assertions.assertThatThrownBy;
25+
26+
/** Test for {@link GenericRow}. */
27+
class GenericRowTest {
28+
29+
@Test
30+
void testConstructor() {
31+
GenericRow row = new GenericRow(3);
32+
assertThat(row.getFieldCount()).isEqualTo(3);
33+
assertThat(row.getField(0)).isNull();
34+
assertThat(row.getField(1)).isNull();
35+
assertThat(row.getField(2)).isNull();
36+
37+
assertThatThrownBy(() -> new GenericRow(-1)).isInstanceOf(NegativeArraySizeException.class);
38+
39+
// test set/get and toString().
40+
row.setField(0, 1);
41+
row.setField(1, null);
42+
row.setField(2, 3);
43+
assertThat(row).isEqualTo(GenericRow.of(1, null, 3));
44+
assertThat(row.getField(0)).isEqualTo(1);
45+
assertThat(row.getField(1)).isNull();
46+
assertThat(row.getField(2)).isEqualTo(3);
47+
assertThat(row.toString()).isEqualTo("(1,null,3)");
48+
}
49+
50+
@Test
51+
void testGenericRows() {
52+
GenericRow genericRow = GenericRow.of(2, 0, 1, null, 4);
53+
assertThat(genericRow.getFieldCount()).isEqualTo(5);
54+
assertThat(genericRow.getInt(0)).isEqualTo(2);
55+
assertThat(genericRow.getInt(1)).isEqualTo(0);
56+
assertThat(genericRow.getInt(2)).isEqualTo(1);
57+
assertThat(genericRow.isNullAt(3)).isTrue();
58+
assertThat(genericRow.getInt(4)).isEqualTo(4);
59+
60+
genericRow = GenericRow.of(0L, 1L, null, 3L);
61+
assertThat(genericRow.getLong(0)).isEqualTo(0L);
62+
assertThat(genericRow.getLong(1)).isEqualTo(1L);
63+
assertThat(genericRow.isNullAt(2)).isTrue();
64+
assertThat(genericRow.getLong(3)).isEqualTo(3L);
65+
66+
genericRow = GenericRow.of((short) 5, null, (short) 7, (short) 8);
67+
assertThat(genericRow.getShort(0)).isEqualTo((short) 5);
68+
assertThat(genericRow.isNullAt(1)).isTrue();
69+
assertThat(genericRow.getShort(2)).isEqualTo((short) 7);
70+
assertThat(genericRow.getShort(3)).isEqualTo((short) 8);
71+
72+
genericRow = GenericRow.of((byte) 5, (byte) 6, null, (byte) 8);
73+
assertThat(genericRow.getByte(0)).isEqualTo((byte) 5);
74+
assertThat(genericRow.getByte(1)).isEqualTo((byte) 6);
75+
assertThat(genericRow.isNullAt(2)).isTrue();
76+
assertThat(genericRow.getByte(3)).isEqualTo((byte) 8);
77+
78+
genericRow = GenericRow.of(null, false, true, false);
79+
assertThat(genericRow.isNullAt(0)).isTrue();
80+
assertThat(genericRow.getBoolean(1)).isEqualTo(false);
81+
assertThat(genericRow.getBoolean(2)).isEqualTo(true);
82+
assertThat(genericRow.getBoolean(3)).isEqualTo(false);
83+
84+
genericRow = GenericRow.of(0.0f, null, 0.2f, 0.3f);
85+
assertThat(genericRow.getFloat(0)).isEqualTo(0.0f);
86+
assertThat(genericRow.isNullAt(1)).isTrue();
87+
assertThat(genericRow.getFloat(2)).isEqualTo(0.2f);
88+
assertThat(genericRow.getFloat(3)).isEqualTo(0.3f);
89+
90+
genericRow = GenericRow.of(null, 0.6d, 0.7d, 0.8d);
91+
assertThat(genericRow.isNullAt(0)).isTrue();
92+
assertThat(genericRow.getDouble(1)).isEqualTo(0.6d);
93+
assertThat(genericRow.getDouble(2)).isEqualTo(0.7d);
94+
assertThat(genericRow.getDouble(3)).isEqualTo(0.8d);
95+
96+
genericRow =
97+
GenericRow.of(
98+
BinaryString.fromString("0"),
99+
null,
100+
BinaryString.fromString("2"),
101+
BinaryString.fromString("3"));
102+
assertThat(genericRow.getChar(0, 1).toString()).isEqualTo("0");
103+
assertThat(genericRow.isNullAt(1)).isTrue();
104+
assertThat(genericRow.getChar(2, 1).toString()).isEqualTo("2");
105+
assertThat(genericRow.getChar(3, 1).toString()).isEqualTo("3");
106+
assertThat(genericRow.getString(0).toString()).isEqualTo("0");
107+
assertThat(genericRow.getString(2).toString()).isEqualTo("2");
108+
assertThat(genericRow.getString(3).toString()).isEqualTo("3");
109+
110+
genericRow =
111+
GenericRow.of(
112+
null,
113+
Decimal.fromBigDecimal(new BigDecimal("1"), 18, 0),
114+
Decimal.fromBigDecimal(new BigDecimal("2"), 18, 0),
115+
Decimal.fromBigDecimal(new BigDecimal("3"), 18, 0));
116+
assertThat(genericRow.isNullAt(0)).isTrue();
117+
assertThat(genericRow.getDecimal(1, 18, 0).toString()).isEqualTo("1");
118+
assertThat(genericRow.getDecimal(2, 18, 0).toString()).isEqualTo("2");
119+
assertThat(genericRow.getDecimal(3, 18, 0).toString()).isEqualTo("3");
120+
121+
genericRow =
122+
GenericRow.of(
123+
TimestampNtz.fromMillis(5L),
124+
null,
125+
TimestampNtz.fromMillis(7L),
126+
TimestampNtz.fromMillis(8L));
127+
assertThat(genericRow.getTimestampNtz(0, 3)).isEqualTo(TimestampNtz.fromMillis(5));
128+
assertThat(genericRow.isNullAt(1)).isTrue();
129+
assertThat(genericRow.getTimestampNtz(2, 3)).isEqualTo(TimestampNtz.fromMillis(7));
130+
assertThat(genericRow.getTimestampNtz(3, 3)).isEqualTo(TimestampNtz.fromMillis(8));
131+
132+
genericRow =
133+
GenericRow.of(
134+
TimestampLtz.fromEpochMicros(5L),
135+
TimestampLtz.fromEpochMicros(6L),
136+
TimestampLtz.fromEpochMicros(7L),
137+
null);
138+
assertThat(genericRow.getTimestampLtz(0, 3)).isEqualTo(TimestampLtz.fromEpochMicros(5));
139+
assertThat(genericRow.getTimestampLtz(1, 3)).isEqualTo(TimestampLtz.fromEpochMicros(6));
140+
assertThat(genericRow.getTimestampLtz(2, 3)).isEqualTo(TimestampLtz.fromEpochMicros(7));
141+
assertThat(genericRow.isNullAt(3)).isTrue();
142+
143+
genericRow = GenericRow.of(new byte[] {5}, new byte[] {6}, null, new byte[] {8});
144+
assertThat(genericRow.getBytes(0)).isEqualTo(new byte[] {5});
145+
assertThat(genericRow.getBytes(1)).isEqualTo(new byte[] {6});
146+
assertThat(genericRow.isNullAt(2)).isTrue();
147+
assertThat(genericRow.getBytes(3)).isEqualTo(new byte[] {8});
148+
assertThat(genericRow.getBinary(0, 1)).isEqualTo(new byte[] {5});
149+
assertThat(genericRow.getBinary(1, 1)).isEqualTo(new byte[] {6});
150+
assertThat(genericRow.getBinary(3, 1)).isEqualTo(new byte[] {8});
151+
}
152+
}

fluss-common/src/test/java/com/alibaba/fluss/row/ProjectedRowTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
import static org.assertj.core.api.Assertions.assertThat;
2424

25-
/** Tests for {@link com.alibaba.fluss.row.ProjectedRow}. */
25+
/** Tests for {@link ProjectedRow}. */
2626
class ProjectedRowTest {
2727
@Test
2828
void testProjectedRows() {

fluss-test-coverage/pom.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,6 @@
253253
com.alibaba.fluss.utils.concurrent.FutureUtils.Timeout
254254
</exclude>
255255
<exclude>com.alibaba.fluss.row.BinarySection</exclude>
256-
<exclude>com.alibaba.fluss.row.GenericRow</exclude>
257256
<exclude>com.alibaba.fluss.row.arrow.*</exclude>
258257
<exclude>
259258
com.alibaba.fluss.row.columnar.BytesColumnVector.Bytes

0 commit comments

Comments
 (0)