"""Synthetic nearest-rank percentile counterexample, durations in seconds."""
from math import ceil
import json


def nearest_rank(values, p):
    if not values or not 0 < p <= 1:
        raise ValueError("require observations and 0 < p <= 1")
    ordered = sorted(values)
    return ordered[ceil(p * len(ordered)) - 1]


def main():
    a = [1.0] * 100
    b = [10.0] * 900
    pa, pb = nearest_rank(a, 0.95), nearest_rank(b, 0.95)
    results = {
        "worker_a_p95": pa,
        "worker_b_p95": pb,
        "mean_of_p95s": (pa + pb) / 2,
        "weighted_mean_of_p95s": (pa * len(a) + pb * len(b)) / (len(a) + len(b)),
        "pooled_p95": nearest_rank(a + b, 0.95),
    }
    assert list(results.values()) == [1.0, 10.0, 5.5, 9.1, 10.0]
    assert nearest_rank([3, 1, 2], 1) == 3
    assert nearest_rank([3, 1, 2], 0.01) == 1
    for values, p in [([], 0.95), ([1], 0), ([1], 1.1)]:
        try:
            nearest_rank(values, p)
        except ValueError:
            pass
        else:
            raise AssertionError("accepted invalid percentile arguments")
    print(json.dumps({**results, "assertions": "passed"}, indent=2))


if __name__ == "__main__":
    main()
