module tests.linear; import tests.utils; import vivaldi; /** * Generates an NxN matrix of latencies in a straight line, a fixed * distance apart. */ template linear(size_t n, double distance) { auto linear() nothrow @safe @nogc { auto matrix = matrix!n; for (size_t i = 0; i < n; i++) { for (size_t j = i + 1; j < n; j++) { const rtt = (j - i) * distance; matrix[i][j] = rtt; matrix[j][i] = rtt; } } return matrix; } } @("linear") unittest { import std.format; import std.random; // Stable seed for random unitvectors. rndGen().seed(1); alias N = Node!(Coordinate!8, 20); immutable distance = 0.01; immutable n = 10; immutable cycles = 1000; N[n] nodes = new N[n]; double[n][n] matrix = linear!(n, distance); simulate!(N, 3, n)(nodes, matrix, cycles); auto stats = evaluate!(N, n)(nodes, matrix); assert(stats.mean <= 0.0025, format("mean=%s", stats.mean)); assert(stats.max <= 0.01, format("max=%s", stats.max)); }