(1) uses TArray<T> instead of TList<T> to avoid memory leaks by carelessness usage (2) added new tests