#include <bits/stdc++.h>
using namespace std;
void err(istream_iterator<string> it) {}
template <typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
  cerr << *it << " = " << a << endl;
  err(++it, args...);
}
double pos1(vector<double> a, double time, double l) {
  long long n = a.size(), i;
  double speed = 1.0;
  double tRemain = time;
  double dPassed = 0.0;
  long long prePos = 0.0;
  for (i = 0; i <= n; i++) {
    double dif;
    if (i == n)
      dif = l - prePos;
    else
      dif = a[i] - prePos;
    double tNeeded = dif / speed;
    if (tNeeded > tRemain) {
      dPassed += speed * tRemain;
      break;
    }
    dPassed += dif;
    tRemain -= tNeeded;
    if (i == n) break;
    speed++;
    prePos = a[i];
    ;
  }
  return dPassed;
}
double pos2(vector<double> a, double time, double l) {
  long long n = a.size(), i;
  double speed = 1.0;
  double tRemain = time;
  double dPassed = 0.0;
  long long prePos = l;
  for (i = n - 1; i >= -1; i--) {
    double dif;
    if (i == -1)
      dif = prePos;
    else
      dif = prePos - a[i];
    double tNeeded = dif / speed;
    if (tNeeded > tRemain) {
      dPassed += speed * tRemain;
      break;
    }
    dPassed += dif;
    tRemain -= tNeeded;
    if (i == -1) break;
    speed++;
    prePos = a[i];
  }
  return l - dPassed;
}
int main() {
  long long t;
  cin >> t;
  while (t--) {
    long long i, j, n;
    double l;
    cin >> n >> l;
    vector<double> a(n);
    for (i = 0; i < n; i++) cin >> a[i];
    double lo = 0, hi = 1e9;
    long long it = 100;
    while (it--) {
      double mid = (lo + hi) / 2.0;
      if (pos1(a, mid, l) <= pos2(a, mid, l))
        lo = mid;
      else
        hi = mid;
    }
    cout << setprecision(15) << fixed << lo << endl;
  }
}
