Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions workspaces/adventure-pack/goodies/java/src/digits_int/AP.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package digits_int;

import iterable_int_stream.IterableIntStream;
import java.util.stream.IntStream;

public final class AP {

/**
* Get the digits in the given integer. The digits are returned as an
* {@link IterableIntStream integer stream} with the least significant digit as the first element
* in the stream. For example, for integer 27363, [3,6,3,7,2] is returned.
* @param number Integer of interest.
* @return The {@link IterableIntStream stream} of digits.
*/
public static IterableIntStream digits(int number) {
return digits(number, 10);
}

/**
* Get the digits in the given integer for the given radix value. The digits are returned as an
* {@link IterableIntStream integer stream} with the least significant digit as the first element
* in the stream. For example, for integer 27363, [3,6,3,7,2] is returned with radix = 10.
* @param number Integer of interest.
* @param radix Radix value of interest.
* @return The {@link IterableIntStream stream} of digits.
*/
public static IterableIntStream digits(int number, int radix) {
if (number < 0) throw new IllegalArgumentException(
"Please provide a positive integer."
);

if (radix < 2) throw new IllegalArgumentException(
"Please provide a radix greater than or equal to 2."
);

return IterableIntStream.from(
number == 0
? IntStream.of(0)
: IntStream.iterate(number, num -> num != 0, num -> num / radix).map(
num -> num % radix
)
);
}
}
40 changes: 40 additions & 0 deletions workspaces/adventure-pack/goodies/java/src/digits_int/Test.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package digits_int;

import static digits_int.AP.digits;
import static org.junit.jupiter.api.Assertions.assertIterableEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;

import iterable_int_stream.IterableIntStream;
import java.util.List;
import java.util.stream.IntStream;
import org.junit.jupiter.api.Test;

class DigitsIntTest {

@Test
public void withIntegerGreaterThanZero() {
assertIterableEquals(List.of(4, 8, 9, 4), digits(4984));
}

@Test
public void withZero() {
assertIterableEquals(List.of(0), digits(0));
}

@Test
public void withRadixOtherThan10() {
assertIterableEquals(List.of(4, 6, 6, 0, 5), digits(12345, 7));
}

@Test
public void withRadixLessThan2() {
assertThrows(IllegalArgumentException.class, () -> digits(12345, 1));
}

@Test
public void withNegativeInteger() {
assertThrows(IllegalArgumentException.class, () -> digits(-145));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"name": "digits(int)"
}
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,105 @@ final class VirtualList<T> extends AbstractList<T> {
/////////////////////////// END ADVENTURE PACK CODE ////////////////////////////"
`;

exports[`App can equip single goody: Java digits(int) 1`] = `
"////////////////////////// BEGIN ADVENTURE PACK CODE ///////////////////////////
// Adventure Pack commit fake-commit-hash
// Running at: https://example.com/

import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Iterator;
import java.util.Spliterator;
import java.util.function.Consumer;
import java.util.function.IntConsumer;
import java.util.stream.IntStream;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;

@SuppressWarnings("overloads")
interface IterableIntStream extends Iterable<Integer>, IntStream {
@Override
public Spliterator.OfInt spliterator();

public static IterableIntStream from(final Iterable<Integer> iterable) {
return from(iterable.spliterator());
}

public static IterableIntStream from(final Iterator<Integer> iterator) {
return from(() -> iterator);
}

public static IterableIntStream from(final Spliterator<Integer> spliterator) {
return from(StreamSupport.stream(spliterator, false));
}

public static IterableIntStream from(final Spliterator.OfInt spliterator) {
return from(StreamSupport.intStream(spliterator, false));
}

public static IterableIntStream from(final Stream<Integer> stream) {
return from(stream.mapToInt(Integer::intValue));
}

public static IterableIntStream from(final IntStream stream) {
@SuppressWarnings("unchecked")
var proxy = (IterableIntStream) Proxy.newProxyInstance(
ClassLoader.getSystemClassLoader(),
new Class<?>[] { IterableIntStream.class },
(Object _proxy, Method method, Object[] args) ->
IntStream.class.getMethod(
method.getName(),
method.getParameterTypes()
).invoke(stream, args)
);
return proxy;
}
}

final class AP {
private AP() {}

/**
* Get the digits in the given integer. The digits are returned as an
* {@link IterableIntStream integer stream} with the least significant digit as the first element
* in the stream. For example, for integer 27363, [3,6,3,7,2] is returned.
* @param number Integer of interest.
* @return The {@link IterableIntStream stream} of digits.
*/
public static IterableIntStream digits(int number) {
return digits(number, 10);
}

/**
* Get the digits in the given integer for the given radix value. The digits are returned as an
* {@link IterableIntStream integer stream} with the least significant digit as the first element
* in the stream. For example, for integer 27363, [3,6,3,7,2] is returned with radix = 10.
* @param number Integer of interest.
* @param radix Radix value of interest.
* @return The {@link IterableIntStream stream} of digits.
*/
public static IterableIntStream digits(int number, int radix) {
if (number < 0) throw new IllegalArgumentException(
"Please provide a positive integer."
);

if (radix < 2) throw new IllegalArgumentException(
"Please provide a radix greater than or equal to 2."
);

return IterableIntStream.from(
number == 0
? IntStream.of(0)
: IntStream.iterate(number, num -> num != 0, num -> num / radix).map(
num -> num % radix
)
);
}
}

/////////////////////////// END ADVENTURE PACK CODE ////////////////////////////"
`;

exports[`App can equip single goody: Java gcd(int,int) 1`] = `
"////////////////////////// BEGIN ADVENTURE PACK CODE ///////////////////////////
// Adventure Pack commit fake-commit-hash
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -359,6 +359,55 @@ final class VirtualList<T> extends AbstractList<T> {
}"
`;

exports[`App can render goody: Java digits(int) 1`] = `
"package digits_int;

import iterable_int_stream.IterableIntStream;

import java.util.stream.IntStream;

final class AP {
private AP() {}

/**
* Get the digits in the given integer. The digits are returned as an
* {@link IterableIntStream integer stream} with the least significant digit as the first element
* in the stream. For example, for integer 27363, [3,6,3,7,2] is returned.
* @param number Integer of interest.
* @return The {@link IterableIntStream stream} of digits.
*/
public static IterableIntStream digits(int number) {
return digits(number, 10);
}

/**
* Get the digits in the given integer for the given radix value. The digits are returned as an
* {@link IterableIntStream integer stream} with the least significant digit as the first element
* in the stream. For example, for integer 27363, [3,6,3,7,2] is returned with radix = 10.
* @param number Integer of interest.
* @param radix Radix value of interest.
* @return The {@link IterableIntStream stream} of digits.
*/
public static IterableIntStream digits(int number, int radix) {
if (number < 0) throw new IllegalArgumentException(
"Please provide a positive integer."
);

if (radix < 2) throw new IllegalArgumentException(
"Please provide a radix greater than or equal to 2."
);

return IterableIntStream.from(
number == 0
? IntStream.of(0)
: IntStream.iterate(number, num -> num != 0, num -> num / radix).map(
num -> num % radix
)
);
}
}"
`;

exports[`App can render goody: Java gcd(int,int) 1`] = `
"package gcd_int_int;

Expand Down