from __future__ import division
from heapq import *
t = int(raw_input())
class Job:
def __init__(self, cost, time , deadline):
self.cost = cost
self.time = time
self.deadline = deadline
def __lt__(self, other):
if other.deadline != self.deadline:
return self.deadline < other.deadline
else:
self.cost > other.cost
for _ in range(t):
heaplist = []
total_cost = 0
n = int(raw_input())
dic_tuple = {}
dic_time_required = {}
ds = set()
deadlines = []
for __ in range(n):
a, time, deadline = map(int, raw_input().split())
job = Job(a, time, deadline)
deadlines.append(job)
deadlines = sorted(deadlines)
time = 0
ans = 0
for deadline in deadlines:
time += deadline.time
heappush(heaplist, (-deadline.cost, -float(deadline.time / deadline.cost)))
while time > deadline.deadline:
temp_cost, temp_ratio = heappop(heaplist)
cost, ratio = -temp_cost, -temp_ratio
if time - cost * ratio > deadline.deadline:
time -= cost * ratio
ans += ratio
else:
x = (time - deadline.deadline) / cost
time -= cost * x
ans += x
heappush(heaplist, (-cost, -(ratio - x)))
print("%.2f" % ans)
ZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgoKZnJvbSBoZWFwcSBpbXBvcnQgKgp0ID0gaW50KHJhd19pbnB1dCgpKQpjbGFzcyBKb2I6CiAgICBkZWYgX19pbml0X18oc2VsZiwgY29zdCwgdGltZSAsIGRlYWRsaW5lKToKICAgICAgICBzZWxmLmNvc3QgPSBjb3N0CiAgICAgICAgc2VsZi50aW1lID0gdGltZQogICAgICAgIHNlbGYuZGVhZGxpbmUgPSBkZWFkbGluZQoKICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgogICAgICAgIGlmIG90aGVyLmRlYWRsaW5lICE9IHNlbGYuZGVhZGxpbmU6CiAgICAgICAgICAgIHJldHVybiBzZWxmLmRlYWRsaW5lIDwgb3RoZXIuZGVhZGxpbmUKICAgICAgICBlbHNlOgogICAgICAgICAgICBzZWxmLmNvc3QgPiBvdGhlci5jb3N0CgoKZm9yIF8gaW4gcmFuZ2UodCk6CiAgICBoZWFwbGlzdCA9IFtdCiAgICB0b3RhbF9jb3N0ID0gMAogICAgbiA9IGludChyYXdfaW5wdXQoKSkKICAgIGRpY190dXBsZSA9IHt9CiAgICBkaWNfdGltZV9yZXF1aXJlZCA9IHt9CiAgICBkcyA9IHNldCgpCiAgICBkZWFkbGluZXMgPSBbXQogICAgZm9yIF9fIGluIHJhbmdlKG4pOgogICAgICAgIGEsIHRpbWUsIGRlYWRsaW5lID0gbWFwKGludCwgcmF3X2lucHV0KCkuc3BsaXQoKSkKICAgICAgICBqb2IgPSBKb2IoYSwgdGltZSwgZGVhZGxpbmUpCiAgICAgICAgZGVhZGxpbmVzLmFwcGVuZChqb2IpCgogICAgZGVhZGxpbmVzID0gc29ydGVkKGRlYWRsaW5lcykKICAgIHRpbWUgPSAwCiAgICBhbnMgPSAwCiAgICBmb3IgZGVhZGxpbmUgaW4gZGVhZGxpbmVzOgogICAgICAgIHRpbWUgKz0gZGVhZGxpbmUudGltZQogICAgICAgIGhlYXBwdXNoKGhlYXBsaXN0LCAoLWRlYWRsaW5lLmNvc3QsIC1mbG9hdChkZWFkbGluZS50aW1lIC8gZGVhZGxpbmUuY29zdCkpKQogICAgICAgIHdoaWxlIHRpbWUgPiBkZWFkbGluZS5kZWFkbGluZToKICAgICAgICAgICAgdGVtcF9jb3N0LCB0ZW1wX3JhdGlvID0gaGVhcHBvcChoZWFwbGlzdCkKICAgICAgICAgICAgY29zdCwgcmF0aW8gPSAtdGVtcF9jb3N0LCAtdGVtcF9yYXRpbwogICAgICAgICAgICBpZiB0aW1lIC0gY29zdCAqIHJhdGlvID4gZGVhZGxpbmUuZGVhZGxpbmU6CiAgICAgICAgICAgICAgICB0aW1lIC09IGNvc3QgKiByYXRpbwogICAgICAgICAgICAgICAgYW5zICs9IHJhdGlvCgogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgeCA9ICh0aW1lIC0gZGVhZGxpbmUuZGVhZGxpbmUpIC8gY29zdAogICAgICAgICAgICAgICAgdGltZSAtPSBjb3N0ICogeAogICAgICAgICAgICAgICAgYW5zICs9IHgKICAgICAgICAgICAgICAgIGhlYXBwdXNoKGhlYXBsaXN0LCAoLWNvc3QsIC0ocmF0aW8gLSB4KSkpCiAgICBwcmludCgiJS4yZiIgJSBhbnMpCgo=