#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2")
#pragma GCC optimize("trapv")
using namespace std;
void err(istream_iterator<string> it) {}
template <typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
  cout << *it << " : " << a << endl;
  err(++it, args...);
}
vector<double> a, b;
long long int n;
double l;
bool check(double time) {
  double vel = 1.0, pos_left = 0.0, remain = time, pos_right = 0.0;
  for (int i = 1; i <= n; i++) {
    double dis = b[i] - b[i - 1];
    if (dis / vel > remain) {
      pos_left += remain * vel;
      remain = 0;
      break;
    } else {
      pos_left += dis;
      remain -= dis / vel;
      vel += 1.0;
    }
  }
  if (remain > 0) {
    pos_left += remain * vel;
  }
  vel = 1.0, remain = time;
  for (int i = 1; i <= n; i++) {
    double dis = a[i] - a[i - 1];
    if (dis / vel > remain) {
      pos_right += remain * vel;
      remain = 0;
      break;
    } else {
      pos_right += dis;
      remain -= dis / vel;
      vel += 1.0;
    }
  }
  if (remain > 0) {
    pos_right += remain * vel;
  }
  if (l - pos_left <= pos_right)
    return true;
  else
    return false;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin.exceptions(cin.failbit);
  ;
  int cas;
  cin >> cas;
  while (cas--) {
    cin >> n >> l;
    a.resize(n + 1);
    b.clear();
    a[0] = 0;
    for (long long int i = 1; i < (n + 1); ++i) {
      cin >> a[i];
      b.push_back(l - a[i]);
    }
    b.push_back(0);
    reverse((b).begin(), (b).end());
    double lo = 0, hi = l;
    for (int iter = 1; iter <= 40; iter++) {
      double mid = (lo + hi) / 2;
      if (check(mid))
        hi = mid;
      else
        lo = mid;
    }
    cout << setprecision(16) << fixed;
    if (check(lo))
      cout << lo << endl;
    else
      cout << hi << endl;
  }
  return 0;
}
