Code:
#include<bits/stdc++.h>
#define setIO(s) freopen(s".in","r",stdin)
#define maxn 400003
#define ll long long
using namespace std;
namespace IO
{
inline int read()
{
int ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return ans;
}
};
const double pi=acos(-1.0);
struct cpx
{
double x,y;
cpx(double a=0,double b=0){ x=a,y=b; }
cpx operator+(const cpx b) { return cpx(x+b.x, y+b.y); }
cpx operator-(const cpx b) { return cpx(x-b.x, y-b.y); }
cpx operator*(const cpx b) { return cpx(x*b.x-y*b.y,x*b.y+y*b.x); }
}A[maxn],B[maxn];
inline void FFT(cpx *a,int n,int flag)
{
for(int i=0,k=0;i<n;++i)
{
if(i>k) swap(a[i], a[k]);
for(int j=(n>>1);(k^=j)<j;j>>=1);
}
for(int mid=1;mid<n;mid<<=1)
{
cpx wn(cos(pi/mid), flag*sin(pi/mid)),x,y;
for(int i=0;i<n;i+=(mid<<1))
{
cpx w(1,0);
for(int j=0;j<mid;++j)
{
x=a[i+j],y=w*a[i+j+mid];
a[i+j]=x+y, a[i+j+mid]=x-y;
w=w*wn;
}
}
}
if(flag==-1) for(int i=0;i<n;++i) a[i].x/=(double)n;
}
int f[maxn], arr[maxn], g[maxn];
ll answer[maxn];
inline void solve()
{
int n,Max=0,len;
n=IO::read();
for(int i=1;i<=n;++i) arr[i]=IO::read(), ++f[arr[i]], Max=max(Max, arr[i]);
for(int i=Max;i>=1;--i) g[i]=f[i]+g[i+1];
for(int i=1;i<=Max;++i) A[i].x=(double)f[i];
for(len=1;len<=(Max<<1);len<<=1);
FFT(A,len,1);
for(int i=0;i<len;++i) A[i]=A[i]*A[i];
FFT(A,len,-1);
for(int i=1;i<len;++i)
{
answer[i]=(ll)(A[i].x+0.5);
if(!answer[i]) continue;
if(i%2==0) answer[i]-=f[i>>1];
answer[i]>>=1;
}
ll up,down;
up=down=(ll)n*(n-1)*(n-2)/6;
for(int i=0;i<=len;++i) up-=answer[i]*(ll)g[i];
printf("%.7f\n",(double)up/(double)down);
memset(A,0,sizeof(A)), memset(f,0,sizeof(f)), memset(g,0,sizeof(g));
}
int main()
{
// setIO("input");
int T;
T=IO::read();
while(T--) solve();
return 0;
}