#include<bits/stdc++.h>
using namespace std;
using ll=long long;

int main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    ll T;
    cin>>T;
    while(T--){
        ll n;
        cin>>n;
        unordered_map<ll,ll>cnt_x; // 统计每个数值的节点数(仅新增这一个变量)
        for(ll i=0;i<n;i++){
            ll t;
            cin>>t;
            cnt_x[t]++;         // 统计每个数值有多少个节点
        }

        ll cnt=0; // 总连通块数(核心变量,保留你的命名)
        for(auto [k,v] : cnt_x){
            // 情况1:孤立数值(k-1和k+1都不在map中)→ 节点数=连通块数
            if(cnt_x.find(k-1)==cnt_x.end() && cnt_x.find(k+1)==cnt_x.end()){
                cnt += cnt_x[k];
            }
            // 情况2:连续段的起点(k-1不在,k+1在)→ 仅算1个连通块
            else if(cnt_x.find(k-1)==cnt_x.end() && cnt_x.find(k+1)!=cnt_x.end()){
                cnt += 1;
            }
            // 情况3:连续段中间/末尾 → 不统计(避免重复)
        }

        // 最少加边数=连通块数-1,边界处理(cnt=0时输出0)
        cout<<cnt-1<<'\n';
    }
	return 0;
}