#include <bits/stdc++.h>
using namespace std;
struct Trie {
static const int B = 31;
struct Node {
Node *nxt[2];
int cnt;
Node () {
fill(begin(nxt), end(nxt), nullptr);
cnt = 0;
}
} *who;
Trie () { who = new Node(); }
void insert(int val) {
Node *mover = who;
mover -> cnt += 1;
for (int i = B - 1; ~i; --i) {
int b = val >> i & 1;
if (mover -> nxt[b] == nullptr) mover -> nxt[b] = new Node();
mover = mover -> nxt[b], mover -> cnt += 1;
}
}
int Qry1 (int x, int k) { // Number of values (val ^ x) < k;
Node *mover = who;
int ans = 0;
for (int i = B - 1; ~i; --i) {
int d = x >> i & 1;
if (k >> i & 1) {
if (mover -> nxt[d]) ans += mover -> nxt[d] -> cnt;
if (mover -> nxt[!d]) mover = mover -> nxt[!d];
else break;
} else if (mover -> nxt[d]) mover = mover -> nxt[d];
else break;
}
return ans;
}
int Qry2 (int x, int k) { // Number of values (val ^ x) > k;
Node *mover = who;
int ans = 0;
for (int i = B - 1; ~i; --i) {
int d = x >> i & 1;
if (~k >> i & 1) {
if (mover -> nxt[!d]) ans += mover -> nxt[!d] -> cnt;
if (mover -> nxt[d]) mover = mover -> nxt[d];
else break;
} else if (mover -> nxt[!d]) mover = mover -> nxt[!d];
else break;
}
return ans;
}
};
void solve(int cs) {
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i++) cin >> a[i];
int64_t ans = 0;
Trie trie;
for (int i = n - 1; ~i; --i) {
ans += trie.Qry2(i + 1, a[i] ^ (i + 1));
trie.insert(a[i] ^ (i + 1));
}
cout << ans << "\n";
}
int32_t main() {
cin.tie(0) -> sync_with_stdio(0);
int t = 1;
cin >> t;
for (int i = 1; i <= t; i++) {
solve(i);
}
return 0;
}