#include <iostream>
#include <numeric>
#include <algorithm>
#include <vector>
#include <array>

using namespace std;

constexpr int limit = 10000;
constexpr int diff = 32;
constexpr int bucket_num = (limit/diff)+1;

int adjacent_buckets(const vector<int>& bucket1, const vector<int>& bucket2)
{
    std::array<int,diff> pairs{};
    for(int number : bucket1)
     {
         for(int i=0;i<number;i++)
            pairs[i]++;
     }

    return std::accumulate(bucket2.begin(), bucket2.end(), 0,
                           [&pairs](int s, int n){ return s + pairs[n]; }); 
}

void solve()
{
	int i,n;
	std::array<std::vector<int>,bucket_num> buckets;
	
	cin>>n;
	int number;
	for(i=0;i<n;i++)
	{
	    cin >> number;
	    buckets[number/diff].push_back(number%diff);
	}
	
	int result = std::accumulate(buckets.begin(), buckets.end(), 0,
                  [](int s, vector<int>& v){ return s + (v.size()*(v.size()-1))/2; }); 
                  
    for(int i=0;i<bucket_num-1;i++)
   		if(buckets[i].size() && buckets[i+1].size())
    		result += adjacent_buckets(buckets[i], buckets[i+1]);
    		
    cout << result << endl;
}

int main() {
	int T;
    cin >> T;
    for (int i=0 ; i<T ; i++)
        solve();
	return 0;
}