Skip to content

Commit 42077da

Browse files
committed
WIP: actions for streams implementation
1 parent 1d4189a commit 42077da

8 files changed

Lines changed: 222 additions & 84 deletions

File tree

utbot-framework/src/main/java/org/utbot/engine/overrides/stream/UtStream.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.utbot.engine.overrides.stream;
22

3+
import org.utbot.api.mock.UtMock;
34
import org.utbot.engine.overrides.UtArrayMock;
45
import org.utbot.engine.overrides.collections.RangeModifiableUnlimitedArray;
56
import org.utbot.engine.overrides.collections.UtArrayList;
@@ -169,7 +170,7 @@ private int filterInvocation(Object[] originArray, Object[] filtered, Predicate
169170
public <R> Stream<R> map(Function<? super E, ? extends R> mapper) {
170171
preconditionCheckWithClosingStream();
171172

172-
final MapAction mapAction = new MapAction((Function<Object, Object>) mapper);
173+
final MapAction mapAction = new MapAction(mapper);
173174
actions.insert(actions.end++, mapAction);
174175

175176
return new UtStream<>(this);
@@ -366,8 +367,10 @@ public Stream<E> limit(long maxSize) {
366367
throw new IllegalArgumentException();
367368
}
368369

369-
final LimitAction limitAction = new LimitAction(maxSize);
370-
actions.insert(actions.end++, limitAction);
370+
assumeOrExecuteConcretely(maxSize <= Integer.MAX_VALUE);
371+
372+
final LimitAction limitAction = new LimitAction((int) maxSize);
373+
actions.set(actions.end++, limitAction);
371374

372375
return new UtStream<>(this);
373376
}
@@ -461,6 +464,8 @@ public Object[] toArray() {
461464
preconditionCheckWithClosingStream();
462465

463466
Object[] originArray = origin.toArray();
467+
UtMock.disableClassCastExceptionCheck(originArray);
468+
464469
originArray = applyActions(originArray);
465470

466471
return originArray;
@@ -477,7 +482,10 @@ public <A> A[] toArray(IntFunction<A[]> generator) {
477482

478483
UtArrayMock.arraycopy(origin.toArray(), 0, array, 0, size);
479484

480-
return (A[]) applyActions(array);
485+
final Object[] result = applyActions(array);
486+
UtMock.disableClassCastExceptionCheck(result);
487+
488+
return (A[]) result;
481489
}
482490

483491
@NotNull
@@ -486,6 +494,7 @@ private Object[] applyActions(Object[] originArray) {
486494

487495
for (int i = 0; i < actionsNumber; i++) {
488496
originArray = actions.get(i).applyAction(originArray);
497+
UtMock.disableClassCastExceptionCheck(originArray); // TODO do we need it?
489498
}
490499

491500
return originArray;

utbot-framework/src/main/java/org/utbot/engine/overrides/stream/actions/LimitAction.java

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package org.utbot.engine.overrides.stream.actions;
22

3-
import static org.utbot.api.mock.UtMock.assumeOrExecuteConcretely;
3+
import org.utbot.engine.overrides.UtArrayMock;
44

55
public class LimitAction implements StreamAction {
6-
private final long maxSize;
6+
private final int maxSize;
77

8-
public LimitAction(long maxSize) {
8+
public LimitAction(int maxSize) {
99
this.maxSize = maxSize;
1010
}
1111

@@ -15,25 +15,15 @@ public Object[] applyAction(Object[] originArray) {
1515
return new Object[]{};
1616
}
1717

18-
assumeOrExecuteConcretely(maxSize <= Integer.MAX_VALUE);
19-
2018
final int curSize = originArray.length;
21-
int newSize = (int) maxSize;
19+
int newSize = maxSize;
2220

2321
if (newSize > curSize) {
2422
newSize = curSize;
2523
}
2624

2725
Object[] elements = new Object[newSize];
28-
int i = 0;
29-
30-
for (Object element : originArray) {
31-
if (i >= newSize) {
32-
break;
33-
}
34-
35-
elements[i++] = element;
36-
}
26+
UtArrayMock.arraycopy(originArray, 0, elements, 0, newSize);
3727

3828
return elements;
3929
}

utbot-framework/src/main/java/org/utbot/engine/overrides/stream/actions/MapAction.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,15 @@
33
import java.util.function.Function;
44

55
public class MapAction implements StreamAction {
6-
private final Function<Object, Object> mapping;
6+
@SuppressWarnings("rawtypes")
7+
private final Function mapping;
78

8-
public MapAction(Function<Object, Object> mapping) {
9+
@SuppressWarnings("rawtypes")
10+
public MapAction(Function mapping) {
911
this.mapping = mapping;
1012
}
1113

14+
@SuppressWarnings("unchecked")
1215
@Override
1316
public Object[] applyAction(Object[] originArray) {
1417
Object[] transformed = new Object[originArray.length];

utbot-framework/src/main/java/org/utbot/engine/overrides/stream/actions/SkipAction.java

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.utbot.engine.overrides.stream.actions;
22

3+
import org.utbot.engine.overrides.UtArrayMock;
4+
35
public class SkipAction implements StreamAction {
46
private final long n;
57

@@ -23,16 +25,7 @@ public Object[] applyAction(Object[] originArray) {
2325
}
2426

2527
Object[] elements = new Object[newSize];
26-
int i = 0;
27-
int j = 0;
28-
29-
for (Object element : originArray) {
30-
if (i++ < n) {
31-
break;
32-
}
33-
34-
elements[j++] = element;
35-
}
28+
UtArrayMock.arraycopy(originArray, 0, elements, 0, newSize);
3629

3730
return elements;
3831
}

0 commit comments

Comments
 (0)