#include <bits/stdc++.h>
using namespace std;
using i64 = int64_t;
using u64 = uint64_t;
using pi64 = pair<i64, i64>;
constexpr i64 MAXN = 3 * 100 * 1000 + 5LL;
constexpr i64 MOD = 1000000007LL;
constexpr i64 INF64 = MOD * MOD;
template <class T, class U>
ostream& operator<<(ostream& os, const pair<T, U> p) {
  os << p.first << " " << p.second;
  return os;
}
ostream& operator<<(ostream& os, const vector<i64>& v) {
  for (i64 i = 0; i < v.size(); ++i) {
    os << v[i] << " \n"[i + 1 == v.size()];
  }
  return os;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  const unsigned seed = chrono::system_clock::now().time_since_epoch().count();
  mt19937 gen(seed);
  cout.precision(12);
  cout << fixed;
  i64 T;
  cin >> T;
  ;
  for (; T-- > 0;) {
    i64 N;
    cin >> N;
    ;
    i64 L;
    cin >> L;
    ;
    vector<i64> SA(N + 2);
    for (i64 i = 1; i <= N; ++i) {
      cin >> SA[i];
    }
    SA.back() = L;
    vector<pair<double, i64>> tls(N + 2);
    tls.front().second = 1;
    for (i64 i = 1; i <= N; ++i) {
      const i64 dist = SA[i] - SA[i - 1];
      const double t = dist / (double)tls[i - 1].second;
      tls[i].first = tls[i - 1].first + t;
      tls[i].second = tls[i - 1].second + 1;
    }
    vector<pair<double, i64>> trs(N + 2);
    trs.back().second = 1;
    for (i64 i = N; i >= 0; --i) {
      const i64 dist = SA[i + 1] - SA[i];
      const double t = dist / (double)trs[i + 1].second;
      trs[i].first = trs[i + 1].first + t;
      trs[i].second = trs[i + 1].second + 1;
    }
    for (i64 i = 0; i <= N; ++i) {
      if (tls[i + 1].first < trs[i + 1].first) {
        continue;
      }
      if (trs[i].first < tls[i].first) {
        continue;
      }
      const auto min_max = minmax(tls[i].first, trs[i + 1].first);
      const double extra_time = min_max.second - min_max.first;
      ;
      const double extra_dist =
          extra_time *
          (tls[i].first < trs[i + 1].first ? tls[i].second : trs[i + 1].second);
      const double t_common = (SA[i + 1] - SA[i] - extra_dist) /
                              (tls[i].second + trs[i + 1].second);
      cout << min_max.second + t_common << "\n";
      break;
    }
  }
  return 0;
}
