#include #define FR first #define SE second using namespace std; typedef double db; typedef pair pr; db dis1(pr x,db y) { if (x.FR==1) return fabs(x.SE-y); if (x.FR==2) return min(x.SE+1.0+y,1.0-x.SE+1.0+1.0-y); if (x.FR==3) return x.SE+y; if (x.FR==4) return x.SE+1.0-y; } db dis2(pr x,db y) { if (x.FR==1) return min(x.SE+1.0+y,1.0-x.SE+1.0+1.0-y); if (x.FR==2) return fabs(x.SE-y); if (x.FR==3) return 1.0-x.SE+y; if (x.FR==4) return 1.0-x.SE+1.0-y; } db dis3(pr x,db y) { if (x.FR==1) return x.SE+y; if (x.FR==2) return x.SE+1.0-y; if (x.FR==3) return fabs(x.SE-y); if (x.FR==4) return min(x.SE+1.0+y,1.0-x.SE+1.0+1.0-y); } db dis4(pr x,db y) { if (x.FR==1) return 1.0-x.SE+y; if (x.FR==2) return 1.0-x.SE+1.0-y; if (x.FR==3) return min(x.SE+1.0+y,1.0-x.SE+1.0+1.0-y); if (x.FR==4) return fabs(x.SE-y); } pr a[5]; int num[5]; db query1(db x) { return dis1(a[num[1]],x)+dis2(a[num[2]],1.0-x)+dis3(a[num[3]],x)+dis4(a[num[4]],1.0-x); } db query2(db x) { return dis1(a[num[1]],x)+dis2(a[num[2]],1.0-x)+dis3(a[num[3]],1.0-x)+dis4(a[num[4]],x); } int main() { int cases; scanf("%d",&cases); for(;cases;cases--) { for(int i=1;i<=4;i++) { db x,y; scanf("%lf%lf",&x,&y); if (y==0) a[i]=pr(1,x); else if (y==1) a[i]=pr(2,x); else if (x==0) a[i]=pr(3,y); else a[i]=pr(4,y); } db ans=1e18; for(int i=1;i<=4;i++) num[i]=i; do { ans=min(ans,query1(0)); ans=min(ans,query1(1)); ans=min(ans,query1(0.5)); ans=min(ans,query1(a[num[1]].SE)); ans=min(ans,query1(1.0-a[num[2]].SE)); ans=min(ans,query1(a[num[3]].SE)); ans=min(ans,query1(1.0-a[num[4]].SE)); } while (next_permutation(num+1,num+4+1)); for(int i=1;i<=4;i++) num[i]=i; do { ans=min(ans,query2(0)); ans=min(ans,query2(1)); ans=min(ans,query2(0.5)); ans=min(ans,query2(a[num[1]].SE)); ans=min(ans,query2(1.0-a[num[2]].SE)); ans=min(ans,query2(1.0-a[num[3]].SE)); ans=min(ans,query2(a[num[4]].SE)); } while (next_permutation(num+1,num+4+1)); printf("%.12f\n",ans); } return 0; }