// includes {{{
#include <algorithm>
#include <cassert>
#include <cmath>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <random>
#include <set>
#include <stack>
#include <tuple>
#include <vector>
// #include<deque>
// #include<multiset>
// #include<bitset>
// #include<cstring>
// #include<bits/stdc++.h>
// }}}
using namespace std;
using ll = long long;

// accum2D range2D range2Dloop {{{
template < class T >
void accum2D(T &val, int h, int w) {
  for(int i = 1; i < h; i++)
    for(int j = 0; j < w; j++) val[i][j] += val[i - 1][j];
  for(int i = 0; i < h; i++)
    for(int j = 1; j < w; j++) val[i][j] += val[i][j - 1];
}

template < class T,
           class V = typename std::remove_reference< decltype(T()[0][0]) >::type >
V range2D(T &val, int y1, int x1, int y2, int x2, int h, int w) {
  if(y2 >= h) y2 = h - 1;
  if(x2 >= w) x2 = w - 1;
  if(y1 > y2 || x1 > x2) return static_cast< V >(0);
  V res(val[y2][x2]);
  if(y1 - 1 >= 0) res -= val[y1 - 1][x2];
  if(x1 - 1 >= 0) res -= val[y2][x1 - 1];
  if(y1 - 1 >= 0 && x1 - 1 >= 0) res += val[y1 - 1][x1 - 1];
  return res;
}

template < class T,
           class V = typename std::remove_reference< decltype(T()[0][0]) >::type >
auto range2Dloop(T &val, ll ty1, ll tx1, ll y2, ll x2, int h, int w) {
  if(ty1 > y2 || tx1 > x2) return static_cast< V >(0);

  ll y1 = ty1 % h;
  if(y1 < 0) y1 += h;
  ll x1 = tx1 % w;
  if(x1 < 0) x1 += w;

  y2 += y1 - ty1;
  x2 += x1 - tx1;

  ll gy = y2 / h;
  ll gx = x2 / w;
  y2 %= h;
  x2 %= w;

  V res(0);
  if(gy == 0 && gx == 0) {
    res += range2D< T >(val, y1, x1, y2, x2, h, w);
  } else if(gy == 0) {
    res += range2D< T >(val, y1, x1, y2, w - 1, h, w);
    res += range2D< T >(val, y1, 0, y2, x2, h, w);
    res += range2D< T >(val, y1, 0, y2, w - 1, h, w) * (gx - 1);
  } else if(gx == 0) {
    res += range2D< T >(val, y1, x1, h - 1, x2, h, w);
    res += range2D< T >(val, 0, x1, y2, x2, h, w);
    res += range2D< T >(val, 0, x1, h - 1, x2, h, w) * (gy - 1);
  } else {
    res += range2D< T >(val, y1, x1, h - 1, w - 1, h, w);                     // UL
    res += range2D< T >(val, 0, x1, y2, w - 1, h, w);                         // DL
    res += range2D< T >(val, y1, 0, h - 1, x2, h, w);                         // UR
    res += range2D< T >(val, 0, 0, y2, x2, h, w);                             // DR
    res += range2D< T >(val, y1, 0, h - 1, w - 1, h, w) * (gx - 1);           // U
    res += range2D< T >(val, 0, 0, y2, w - 1, h, w) * (gx - 1);               // D
    res += range2D< T >(val, 0, x1, h - 1, w - 1, h, w) * (gy - 1);           // L
    res += range2D< T >(val, 0, x1, h - 1, x2, h, w) * (gy - 1);              // R
    res += range2D< T >(val, 0, 0, h - 1, w - 1, h, w) * (gy - 1) * (gx - 1); // C
  }
  return res;
}
// }}}

int main() {
  ios::sync_with_stdio(false), cin.tie(0);
  array< array< int, 8 >, 8 > f;
  for(int i = 0; i < 8; i++)
    for(int j = 0; j < 8; j++) {
      f[i][j] = 1;
      if(i % 2 == 0 && j % 2 == 1) f[i][j] = 0;
    }
  accum2D(f, 8, 8);
  int q;
  cin >> q;
  int a, b, c, d;
  for(int i = 0; i < q; i++) {
    cin >> a >> b >> c >> d;
    a--, b--, c--, d--;
    cout << range2D(f, a, b, c, d, 8, 8) << endl;
  }
  return 0;
}



Measured memory_bytes: 3184