#include<stdio.h>
#include<algorithm>
using namespace std;
pair<double,int>dat[1000];
//Y*(tx-sx)=(X-sx)*(ty-sy)+sy*(tx-sx)
//Y*(bx-ax)=(X-ax)*(by-ay)+ay*(bx-ax)
//X=ax
//Y*(tx-sx)=(ax-sx)*(ty-sy)+sy*(tx-sx)
//(bx-ax)*(X*(ty-sy)+sy*tx-sx*ty)=(tx-sx)*(X*(by-ay)+ay*bx-ax*by)
//(bx-ax)*(ty-sy)*X+(bx-ax)*(sy*tx-sx*ty)=(tx-sx)*(by-ay)*X+(tx-sx)*(ay*bx-ax*by)
//((bx-ax)*(ty-sy)-(tx-sx)*(by-ay))*X=(tx-sx)*(ay*bx-ax*by)-(bx-ax)*(sy*tx-sx*ty)
int main(){
	int t;
	scanf("%d",&t);
	while(t--){
		long long ax,ay,bx,by;
		scanf("%lld%lld%lld%lld",&ax,&ay,&bx,&by);
		int c;
		if(ax>bx){
			long long cx=ax;
			ax=bx;
			bx=cx;
			long long cy=ay;
			ay=by;
			by=cy;
		}
		scanf("%d",&c);
		int now=0;
		if(ax==bx){
			if(ay>by){
				long long cy=ay;
				ay=by;
				by=cy;
			}
			for(int i=0;i<c;i++){
				long long sx,sy,tx,ty;
				int type,z;
				scanf("%lld%lld%lld%lld%d%d",&sx,&sy,&tx,&ty,&type,&z);
				type^=z;
				if(tx!=sx&&!(sx>ax&&tx>ax)&&!(sx<ax&&tx<ax)){
					double Y=(double)((ax-sx)*(ty-sy)+sy*(tx-sx))/(tx-sx);
					if((double)ay<Y&&Y<(double)by){
						dat[now++]=make_pair(Y,type);
					}
				}
			}
		}else{
			for(int i=0;i<c;i++){
				long long sx,sy,tx,ty;
				int type,z;
				scanf("%lld%lld%lld%lld%d%d",&sx,&sy,&tx,&ty,&type,&z);
				type^=z;
				if((bx-ax)*(ty-sy)-(tx-sx)*(by-ay)!=0){
					double X=(double)((tx-sx)*(ay*bx-ax*by)-(bx-ax)*(sy*tx-sx*ty))/((bx-ax)*(ty-sy)-(tx-sx)*(by-ay));
					if(sx==tx){
						double Y=(double)((sx-ax)*(by-ay)+ay*(bx-ax))/(bx-ax);
						if((double)sy<Y&&(double)ty<Y)continue;
						if((double)sy>Y&&(double)ty>Y)continue;
					}else{
						if((double)sx<X&&(double)tx<X)continue;
						if((double)sx>X&&(double)tx>X)continue;
					}
					if((double)ax<X&&X<(double)bx){
			//			printf("%f ",X);
						dat[now++]=make_pair(X,type);
					}
				}
			}
		}
		std::sort(dat,dat+now);
		int val=dat[0].second;
		int ret=0;
		for(int i=0;i<now;i++){
			if(dat[i].second!=val){
				ret++;
				val=dat[i].second;
			}
		}
		printf("%d\n",ret);
	}
}