#include <cstdio>
#include <cstring>
long long segtree[400000], lazy[400000];
void propagate(int root, int l, int r) {
segtree[root] += lazy[root] * (r-l+1);
if(l != r) {
lazy[2*root+1] += lazy[root];
lazy[2*root+2] += lazy[root];
}
lazy[root] = 0;
}
long long query(int root, int l, int r, int a, int b) {
if(b < l || r < a) return 0;
propagate(root, l, r);
if(a <= l && r <= b) return segtree[root];
int mid = (l+r)/2;
return query(2*root+1, l, mid, a, b) + query(2*root+2, mid+1, r, a, b);
}
void update(int root, int l, int r, int a, int b, int val) {
if(b < l || r < a) return;
if(a <= l && r <= b) { lazy[root] += val; return; }
int mid = (l+r)/2;
update(2*root+1, l, mid, a, b, val);
update(2*root+2, mid+1, r, a, b, val);
propagate(2*root+1, l, mid);
propagate(2*root+2, mid+1, r);
segtree[root] = segtree[2*root+1] + segtree[2*root+2];
}
int main() {
int t;
scanf("%d", &t);
while(t--) {
int n, c;
scanf("%d %d", &n, &c);
memset(segtree, 0, sizeof segtree);
memset(lazy, 0, sizeof lazy);
for(int i = 0; i < c; i++) {
int type;
scanf("%d", &type);
int p, q, v;
if(type == 0) {
scanf("%d %d %d", &p, &q, &v);
update(0, 0, n-1, p-1, q-1, v);
} else if(type == 1) {
scanf("%d %d", &p, &q);
printf("%lld\n", query(0, 0, n-1, p-1, q-1));
}
}
}
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGNzdHJpbmc+Cgpsb25nIGxvbmcgc2VndHJlZVs0MDAwMDBdLCBsYXp5WzQwMDAwMF07Cgp2b2lkIHByb3BhZ2F0ZShpbnQgcm9vdCwgaW50IGwsIGludCByKSB7CiAgc2VndHJlZVtyb290XSArPSBsYXp5W3Jvb3RdICogKHItbCsxKTsKICBpZihsICE9IHIpIHsKICAgIGxhenlbMipyb290KzFdICs9IGxhenlbcm9vdF07CiAgICBsYXp5WzIqcm9vdCsyXSArPSBsYXp5W3Jvb3RdOwogIH0KICBsYXp5W3Jvb3RdID0gMDsKfQoKbG9uZyBsb25nIHF1ZXJ5KGludCByb290LCBpbnQgbCwgaW50IHIsIGludCBhLCBpbnQgYikgewogIGlmKGIgPCBsIHx8IHIgPCBhKSByZXR1cm4gMDsKCiAgcHJvcGFnYXRlKHJvb3QsIGwsIHIpOwogIGlmKGEgPD0gbCAmJiByIDw9IGIpIHJldHVybiBzZWd0cmVlW3Jvb3RdOwoKICBpbnQgbWlkID0gKGwrcikvMjsKICByZXR1cm4gcXVlcnkoMipyb290KzEsIGwsIG1pZCwgYSwgYikgKyBxdWVyeSgyKnJvb3QrMiwgbWlkKzEsIHIsIGEsIGIpOwp9Cgp2b2lkIHVwZGF0ZShpbnQgcm9vdCwgaW50IGwsIGludCByLCBpbnQgYSwgaW50IGIsIGludCB2YWwpIHsKICBpZihiIDwgbCB8fCByIDwgYSkgcmV0dXJuOwogIGlmKGEgPD0gbCAmJiByIDw9IGIpIHsgbGF6eVtyb290XSArPSB2YWw7IHJldHVybjsgfQoKICBpbnQgbWlkID0gKGwrcikvMjsKICB1cGRhdGUoMipyb290KzEsIGwsIG1pZCwgYSwgYiwgdmFsKTsKICB1cGRhdGUoMipyb290KzIsIG1pZCsxLCByLCBhLCBiLCB2YWwpOwoKICBwcm9wYWdhdGUoMipyb290KzEsIGwsIG1pZCk7CiAgcHJvcGFnYXRlKDIqcm9vdCsyLCBtaWQrMSwgcik7CiAgc2VndHJlZVtyb290XSA9IHNlZ3RyZWVbMipyb290KzFdICsgc2VndHJlZVsyKnJvb3QrMl07Cn0KCmludCBtYWluKCkgewogIGludCB0OwogIHNjYW5mKCIlZCIsICZ0KTsKCiAgd2hpbGUodC0tKSB7CiAgICBpbnQgbiwgYzsKICAgIHNjYW5mKCIlZCAlZCIsICZuLCAmYyk7CgogICAgbWVtc2V0KHNlZ3RyZWUsIDAsIHNpemVvZiBzZWd0cmVlKTsKICAgIG1lbXNldChsYXp5LCAwLCBzaXplb2YgbGF6eSk7CgogICAgZm9yKGludCBpID0gMDsgaSA8IGM7IGkrKykgewogICAgICBpbnQgdHlwZTsKICAgICAgc2NhbmYoIiVkIiwgJnR5cGUpOwoKICAgICAgaW50IHAsIHEsIHY7CiAgICAgIGlmKHR5cGUgPT0gMCkgewogICAgICAgIHNjYW5mKCIlZCAlZCAlZCIsICZwLCAmcSwgJnYpOwogICAgICAgIHVwZGF0ZSgwLCAwLCBuLTEsIHAtMSwgcS0xLCB2KTsKICAgICAgfSBlbHNlIGlmKHR5cGUgPT0gMSkgewogICAgICAgIHNjYW5mKCIlZCAlZCIsICZwLCAmcSk7CiAgICAgICAgcHJpbnRmKCIlbGxkXG4iLCBxdWVyeSgwLCAwLCBuLTEsIHAtMSwgcS0xKSk7CiAgICAgIH0KICAgIH0gICAgICAgICAKICB9Cn0K