CollectionUtilsTest.java 8.6 KB
Newer Older
1
package top.csaf.junit;
2

3
import com.google.gson.JsonArray;
4 5 6
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
7
import top.csaf.CollectionUtils;
8

9
import java.math.BigDecimal;
10
import java.math.BigInteger;
11
import java.util.*;
12
import java.util.function.Function;
13

14 15
import static org.junit.jupiter.api.Assertions.*;

16 17
@Slf4j
@DisplayName("集合工具类测试")
18 19
public class CollectionUtilsTest {

20 21 22 23
  private void println(Object source) {
    System.out.println(source);
  }

24
  @DisplayName("isEmpty:是否 每个集合都 (为 null || 没有元素)")
25 26 27 28 29 30 31 32
  @Test
  void isEmpty() {
    List<String> list = new ArrayList<>();
    println("空列表:" + CollectionUtils.isEmpty(list));
    list.add(null);
    println("[0] 为 null 的列表:" + CollectionUtils.isEmpty(list));
  }

33
  @DisplayName("sizeIsEmpty:是否 每个对象都 (为 null || 没有元素)")
34 35 36 37 38 39 40 41 42 43 44 45 46
  @Test
  void sizeIsEmpty() {
    List<String> list = new ArrayList<>();
    println("空列表:" + CollectionUtils.sizeIsEmpty(list));
    list.add(null);
    println("[0] = null 的列表:" + CollectionUtils.sizeIsEmpty(list));
    Map<String, Object> map = new HashMap<>();
    println("空键值对:" + CollectionUtils.sizeIsEmpty(map));
    map.put(null, null);
    println("{null, null} 的键值对:" + CollectionUtils.sizeIsEmpty(map));
    // TODO ……
  }

47
  @DisplayName("isAllEmpty:是否 每个对象的 (所有元素都为 null || 没有元素)")
48
  @Test
49 50 51 52 53
  void isAllEmpty() {
    List<String> list = new ArrayList<>();
    list.add(null);
    println("[0] 为 null 的列表:" + CollectionUtils.isAllEmpty(list));
    Map<String, Object> map = new HashMap<>();
54 55
    map.put("", null);
    println("{\"\", null} 的键值对:" + CollectionUtils.isAllEmpty(map));
56 57 58 59 60
    println("[null] 的数组:" + CollectionUtils.isAllEmpty(new Object[]{null}));
    println("[0] 为 null 的迭代器(Iterator):" + CollectionUtils.isAllEmpty(list.iterator()));
    Vector<String> vector = new Vector<>();
    vector.add(null);
    println("[0] 为 null 的枚举:" + CollectionUtils.isAllEmpty(vector.elements()));
61
  }
62

63
  @DisplayName("isAnyEmpty:是否 任意对象 (为 null || 没有元素 || 任意元素为 null)")
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
  @Test
  void isAnyEmpty() {
    List<String> list = new ArrayList<>();
    list.add(null);
    list.add("");
    println("[0] 为 null 的列表:" + CollectionUtils.isAnyEmpty(list));
    Map<String, Object> map = new HashMap<>();
    map.put("", null);
    println("{\"\", null} 的键值对:" + CollectionUtils.isAnyEmpty(map));
    println("[null] 的数组:" + CollectionUtils.isAnyEmpty(new Object[]{null, 1}));
    println("[0] 为 null 的迭代器(Iterator):" + CollectionUtils.isAnyEmpty(list.iterator()));
    Vector<String> vector = new Vector<>();
    vector.add(null);
    vector.add("");
    println("[0] 为 null 的枚举:" + CollectionUtils.isAnyEmpty(vector.elements()));
  }
80 81 82 83

  @DisplayName("是否 每个对象的每个元素都相等")
  @Test
  void isAllEquals() {
84 85 86 87 88
    /** {@link CollectionUtils#isAllEquals(boolean, Function, Object...)} */
    assertThrows(NullPointerException.class, () -> CollectionUtils.isAllEquals(true, null, null));
    assertThrows(IllegalArgumentException.class, () -> CollectionUtils.isAllEquals(true, null, new Object[]{}));

    List<Object> list = new ArrayList<>();
89
    list.add("1");
90 91 92 93
    List<Object> list1 = new ArrayList<>();
    list1.add(new BigInteger("1"));
    JsonArray jsonArray = new JsonArray();
    jsonArray.add('1');
94
    Map<String, Object> map = new HashMap<>();
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
    map.put("1", new BigDecimal("1"));
    Object[] array = new Object[]{1.0};
    Vector<Object> vector = new Vector<>();
    vector.add(1.0f);
    assertTrue(CollectionUtils.isAllEquals(true, CollectionUtils::sizeIsEmpty, list, null, list1.iterator(), jsonArray, map, array, vector.elements()));
    // continueFunction 为 null,后续判断到 Iterator。数组排在第一个用于填充上一个元素。
    assertTrue(CollectionUtils.isAllEquals(true, null, array, list1.iterator()));
    // continueFunction 为 null,后续判断到 Enumeration。Enumeration 排在第一个用于填充上一个元素。
    assertTrue(CollectionUtils.isAllEquals(true, null, vector.elements(), list));
    // Iterable 元素不一致结束
    list.set(0, 2);
    assertFalse(CollectionUtils.isAllEquals(true, null, list, list1));
    // 数组元素不一致结束
    array[0] = 2;
    assertFalse(CollectionUtils.isAllEquals(true, null, list1, array));
    // Enumeration 元素不一致结束
    vector.set(0, 2);
    assertFalse(CollectionUtils.isAllEquals(true, null, list1, vector.elements()));
    // isToString = false
    assertFalse(CollectionUtils.isAllEquals(false, null, list, null));

    /** {@link CollectionUtils#isAllEquals(Function, Object...)} */
    assertThrows(NullPointerException.class, () -> CollectionUtils.isAllEquals(null, null));
    assertFalse(CollectionUtils.isAllEquals(null, new ArrayList<>(), null));
  }

  @DisplayName("是否不满足 每个对象的每个元素都相等")
  @Test
  void isNotAllEquals() {
    /** {@link CollectionUtils#isNotAllEquals(boolean, Function, Object...)} */
    assertThrows(NullPointerException.class, () -> CollectionUtils.isNotAllEquals(true, null, null));

    List<Object> list = new ArrayList<>();
    list.add(1);
    List<Object> list1 = new ArrayList<>();
    list1.add(2);
    assertTrue(CollectionUtils.isNotAllEquals(true, null, list, list1));

    /** {@link CollectionUtils#isNotAllEquals(Function, Object...)} */
    assertThrows(NullPointerException.class, () -> CollectionUtils.isNotAllEquals(null, null));
    assertTrue(CollectionUtils.isNotAllEquals(null, new ArrayList<>(), null));
136
  }
137 138 139 140

  @DisplayName("是否 每个对象的同一位置的元素都相等")
  @Test
  void isAllEqualsSameIndex() {
141
    /** {@link CollectionUtils#isAllEquals(boolean, Function, Object...)} */
142 143 144 145
    assertThrows(NullPointerException.class, () -> CollectionUtils.isAllEqualsSameIndex(true, null, null));
    assertThrows(IllegalArgumentException.class, () -> CollectionUtils.isAllEqualsSameIndex(true, null, new ArrayList<>()));

    List<Object> list = new ArrayList<>();
146
    list.add("1");
147 148 149 150 151 152 153 154 155 156
    list.add(2);
    list.add(new BigDecimal("3.0"));
    List<Object> list1 = new ArrayList<>();
    list1.add(new BigInteger("1"));
    list1.add(2.0f);
    list1.add(3L);
    JsonArray jsonArray = new JsonArray();
    jsonArray.add('1');
    jsonArray.add(2.0);
    jsonArray.add(3);
157
    Map<String, Object> map = new HashMap<>();
158 159 160 161 162 163 164 165 166
    map.put("1", '1');
    map.put("2", 2.0);
    map.put("3", 3);
    Object[] array = new Object[]{'1', 2.0, 3};
    Vector<Object> vector = new Vector<>();
    vector.add('1');
    vector.add(2.0);
    vector.add(3);
    assertTrue(CollectionUtils.isAllEqualsSameIndex(true, CollectionUtils::sizeIsEmpty, list, null, list1.iterator(), jsonArray, map, array, vector.elements()));
167
    // 长度不一致判断结束
168
    list.remove(2);
169
    assertFalse(CollectionUtils.isAllEqualsSameIndex(true, null, new ArrayList<>(), list));
170 171 172 173 174 175 176 177
    // 列表元素不一致结束
    list.add(4);
    assertFalse(CollectionUtils.isAllEqualsSameIndex(true, null, list, list1.iterator()));
    // 数组排在第一个用于填充上一次列表
    assertTrue(CollectionUtils.isAllEqualsSameIndex(true, CollectionUtils::sizeIsEmpty, array, list1));
    // 数组元素不一致结束
    array[2] = 4;
    assertFalse(CollectionUtils.isAllEqualsSameIndex(true, CollectionUtils::sizeIsEmpty, list1, array));
178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202

    /** {@link CollectionUtils#isAllEquals(Function, Object...)} */
    assertThrows(NullPointerException.class, () -> CollectionUtils.isAllEqualsSameIndex(null, null));
    assertFalse(CollectionUtils.isAllEqualsSameIndex(null, new ArrayList<>(), null));
  }

  @DisplayName("是否不满足 每个对象的同一位置的元素都相等")
  @Test
  void isNotAllEqualsSameIndex() {
    /** {@link CollectionUtils#isNotAllEqualsSameIndex(boolean, Function, Object...)} */
    assertThrows(NullPointerException.class, () -> CollectionUtils.isNotAllEqualsSameIndex(true, null, null));

    List<Object> list = new ArrayList<>();
    list.add("1");
    list.add(2);
    list.add(new BigDecimal("3.0"));
    List<Object> list1 = new ArrayList<>();
    list1.add(new BigInteger("1"));
    list1.add(2.0f);
    list1.add(3L);
    assertFalse(CollectionUtils.isNotAllEqualsSameIndex(true, null, list, list1));

    /** {@link CollectionUtils#isNotAllEqualsSameIndex(Function, Object...)} */
    assertThrows(NullPointerException.class, () -> CollectionUtils.isNotAllEqualsSameIndex(null, null));
    assertTrue(CollectionUtils.isNotAllEqualsSameIndex(null, new ArrayList<>(), null));
203
  }
204
}