Skip to content

Commit 7b0c348

Browse files
Szkocsovszkijavadev
authored andcommitted
Add U.subtract(values) method.
1 parent f78e292 commit 7b0c348

File tree

2 files changed

+79
-0
lines changed
  • src
    • main/java/com/github/underscore/lodash
    • test/java/com/github/underscore/lodash

2 files changed

+79
-0
lines changed

src/main/java/com/github/underscore/lodash/U.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1111,6 +1111,36 @@ private static Short sum(Short first, Short second) {
11111111
return (short) (first + second);
11121112
}
11131113

1114+
@SuppressWarnings("unchecked")
1115+
public static <T extends Number> T subtract(final T ... values) {
1116+
if (values.length == 0) {
1117+
return null;
1118+
}
1119+
T result = values[0];
1120+
for (int i = 1; i < values.length; i++) {
1121+
if (result instanceof java.math.BigDecimal) {
1122+
java.math.BigDecimal value = (java.math.BigDecimal) values[i];
1123+
result = add(result, (T) value.negate());
1124+
} else if (result instanceof java.math.BigInteger) {
1125+
java.math.BigInteger value = (java.math.BigInteger) values[i];
1126+
result = add(result, (T) value.negate());
1127+
} else if (result instanceof Byte) {
1128+
result = add(result, (T) Byte.valueOf((byte) (values[i].byteValue() * -1)));
1129+
} else if (result instanceof Double) {
1130+
result = add(result, (T) Double.valueOf(values[i].doubleValue() * -1));
1131+
} else if (result instanceof Float) {
1132+
result = add(result, (T) Float.valueOf(values[i].floatValue() * -1));
1133+
} else if (result instanceof Integer) {
1134+
result = add(result, (T) Integer.valueOf(values[i].intValue() * -1));
1135+
} else if (result instanceof Long) {
1136+
result = add(result, (T) Long.valueOf(values[i].longValue() * -1));
1137+
} else if (result instanceof Short) {
1138+
result = add(result, (T) Short.valueOf((short) (values[i].shortValue() * -1)));
1139+
}
1140+
}
1141+
return result;
1142+
}
1143+
11141144
public static <T extends Number> double mean(final Iterable<T> iterable) {
11151145
T result = null;
11161146
int count = 0;

src/test/java/com/github/underscore/lodash/MathTest.java

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,55 @@ public double doubleValue() {
246246
U.sum(asList(new MyNumber(), new MyNumber()));
247247
}
248248

249+
/*
250+
_.subtract(1, 2);
251+
=> -1
252+
_.subtract(1, 2, 3);
253+
=> -4
254+
_.subtract();
255+
=> null
256+
*/
257+
@Test
258+
public void subtract() {
259+
assertEquals("-1", U.subtract((byte) 1, (byte) 2).toString());
260+
assertEquals("-1", U.subtract((short) 1, (short) 2).toString());
261+
assertEquals("-1", U.subtract((int) 1, (int) 2).toString());
262+
assertEquals("-1", U.subtract((long) 1, (long) 2).toString());
263+
assertEquals("-1.0", U.subtract((float) 1, (float) 2).toString());
264+
assertEquals("-1.0", U.subtract((double) 1, (double) 2).toString());
265+
assertEquals("-1", U.subtract(Byte.valueOf((byte) 1), Byte.valueOf((byte) 2)).toString());
266+
assertEquals("-1", U.subtract(Short.valueOf((short) 1), Short.valueOf((short) 2)).toString());
267+
assertEquals("-1", U.subtract(Integer.valueOf(1), Integer.valueOf(2)).toString());
268+
assertEquals("-1", U.subtract(Long.valueOf(1), Long.valueOf(2)).toString());
269+
assertEquals("-1.0", U.subtract(Float.valueOf(1), Float.valueOf(2)).toString());
270+
assertEquals("-1.0", U.subtract(Double.valueOf(1), Double.valueOf(2)).toString());
271+
assertEquals("-1", U.subtract(java.math.BigDecimal.valueOf(1), java.math.BigDecimal.valueOf(2)).toString());
272+
assertEquals("-1", U.subtract(java.math.BigInteger.valueOf(1), java.math.BigInteger.valueOf(2)).toString());
273+
assertEquals("-1", U.subtract((Number) 1, (Number) 2).toString());
274+
assertEquals("-4", U.subtract((int) 1, (int) 2, (int) 3).toString());
275+
assertEquals("1", U.subtract((int) 1).toString());
276+
assertEquals(null, U.subtract());
277+
}
278+
279+
@Test
280+
public void subtractError() {
281+
class MyNumber extends Number {
282+
public int intValue() {
283+
return 0;
284+
}
285+
public long longValue() {
286+
return 0;
287+
}
288+
public float floatValue() {
289+
return 0;
290+
}
291+
public double doubleValue() {
292+
return 0;
293+
}
294+
}
295+
U.subtract(new MyNumber(), new MyNumber());
296+
}
297+
249298
/*
250299
_.mean([0, 0.5, 1]);
251300
=> 0.5

0 commit comments

Comments
 (0)