#include <cstdio>#include <iostream>#include <sstream>#include <cstdlib>#include <string>#include <vector>#include <set>#include <queue>#include <stack>#include <list>#include <cmath>#include <algorithm>#include <map>#include <ctype.h>#define MAXN 100005using namespace std;typedef long long LL;LL inverse(LL a, LL b, LL *X, LL *Y){if(b == 0){*X = 1;*Y = 0;return a;} else {LL xx, yy;LL temp = inverse(b, a % b, &xx, &yy);*X = yy;*Y = xx - (a / b) * yy;return temp;}}void solve(){LL A, B, a, b;cin >> A >> B >> a >> b;LL dis = abs(A - B);LL ans = (1LL<<60);if(dis % a == 0) ans = min(ans, dis / a);if(dis % b == 0) ans = min(ans, dis / b);if((dis - (dis / (a + b)) * (a + b)) % a == 0) ans = min(ans, (dis - (dis / (a + b)) * (a + b)) / a + (dis / (a + b)));if((dis - (dis / (a + b)) * (a + b)) % b == 0) ans = min(ans, (dis - (dis / (a + b)) * (a + b)) / b + (dis / (a + b)));LL x, y;LL gcd = inverse(a, b, &x, &y);if(dis % gcd == 0){x *= dis / gcd;y *= dis / gcd;a /= gcd;b /= gcd;LL mid = (y - x) / (a + b);for(LL mm = mid - 1; mm <= mid + 1; mm++ ){if(abs(x + b * mm) + abs(y - a * mm) == abs(x + b * mm + y - a * mm))ans = min(ans, (LL)max(fabs(x + b * mm), fabs(y - a * mm)));elseans = min(ans, (LL)abs(x - y + (a + b) * mm));}}if(ans == (1LL << 60))cout << -1 << endl;elsecout << ans << endl;}int main(){int test = 0;cin >> test;for(int tt = 0; tt < test; tt++ )solve();return 0;}


