#include<iostream>
#include<vector>
#include<math.h>
#include<algorithm>
#include<stack>
#include<list>
#include<queue>
#include<set>
#include<string>
#include<string.h>
#include <sstream>
#include<map>
#include<iomanip>

#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
//#pragma GCC optimization("unroll-loops")

/*Ordered set
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
#define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update>*/

#define ll long long
#define PI 3.14159265
#define yes cout<<"YES"<<"\n"
#define no cout<<"NO"<<"\n"
using namespace std;

const ll MOD = 1000000007;

ll gcd(ll a,ll b){
    if(a==0)
        return b;
    return gcd(b%a,a);
}

ll lcm(ll a,ll b){
    return (a*b)/gcd(a,b);
}

bool isPrime(ll n){
	for(ll i = 2; i <=sqrt(n); i++)
		if(n % i == 0)
			return 0;
	return 1;
}

string binaryRepresentation(int x){
    string s="";
    for (int i = 31; i >= 0; i--)
    {
        if (x&(1<<i)) cout << "1";
        else cout << "0";
    }
    return s;
}

ll combination(ll n,ll r){
    if(r==n || r==0)
        return 1LL;
    return combination(n-1,r-1) + combination(n-1,r);
}

bool isPowerOfTwo(ll n){
   if(n==0)
        return false;
   return (ceil(log2(n)) == floor(log2(n)));
}

ll power(ll a,ll b){
	ll ans=1;
	while(b)
	{
		if(b&1)
			ans=(ans*a)%MOD;
		b/=2;
		a=(a*a)%MOD;
	}
	return ans%MOD;
}

ll inverse(ll i){
    if(i==1) return 1;
    return (MOD-((MOD/i)*inverse(MOD%i))%MOD+MOD)%MOD;
}

string toString(ll a){
    ostringstream temp;
    temp << a;
    return temp.str();
}

ll toNumber(string s){
    stringstream num(s);
    ll x=0;
    num>>x;
    return x;
}

int main()
{
    //vector<vector<ll> >ar(n,vector<ll> (m,0));
    //vector<ll>::iterator ptr;

    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    int t;
    cin>>t;
    while(t--)
    {
        ll n;
        cin>>n;
        vector<ll>ar(n);
        ll ans=0;
        ll ct=0;
        vector<ll>d;
        ll f=0;
        for(ll i=0;i<n;i++)
        {
            cin>>ar[i];
            if(ar[i]<0)
            {
                ans++;
                d.push_back(ar[i]);
            }
            if(ar[i]>0 && f==0)
                f++;
            if(ar[i]==0)
                ct++;
        }

        if(ans==0)
        {
            if(ct<=1)
            {
                cout<<ct+f<<"\n";
            }
            else
            {
                cout<<ct<<"\n";
            }
            continue;
        }

        if(ct>0)
            d.push_back(0);
        ll mn=1e18;
        if(d.size()>1)
        {
            sort(d.begin(),d.end());
            //for(ll i=0;i<d.size();i++)
            //    cout<<d[i]<<"  ";
            //cout<<"\n";
            for(ll i=0;i<d.size()-1;i++)
            {
                ll diff=abs(d[i+1]-d[i]);
                //cout<<" diff : "<<diff<<"\n";
                mn=min(mn,diff);
            }
        }
        //cout<<" mn : "<<mn<<"\n";
        ll x=0;
        ll y=0;
        for(ll i=0;i<n;i++)
        {
            if(ar[i]>0 && ar[i]<=mn)
            {
                x++;
                break;
            }
            if(ar[i]>0 && y==0)
            {
                y++;
            }
            //d.push_back(x);
        }
        if(ct>1)
        {
            ans+=ct;
        }
        else
        {
            if(ct>0)
                ans++;
            if(x>0)
            {
                ans++;
            }
        }
        cout<<ans<<"\n";
    }

    return 0;
}
