Performance
data class Performance(val lines: List<String>, val symptoms: List<Symptom>, val ranges: List<Performance.Range> = emptyList())(source)
What two runs that carry samples say about time and memory. A measurement differs only when the ranges do not overlap: the minimum of the larger side is above the maximum of the smaller side. Then the larger second run gets a SymptomKind.SLOWER (wall time) or SymptomKind.MEMORY (peak memory) symptom whose value is the ratio of the medians in tenths, as text such as 2.5 times slower. Overlapping ranges give a line that says so and no symptom, and a first run that is larger gives a line and no symptom. A side with fewer than MIN_SAMPLES samples has no spread and is not compared. lines also carry each limit that applies; none names a cause.