diff --git a/tests/test_math.py b/tests/test_math.py
index d9c9688..9298792 100644
--- a/tests/test_math.py
+++ b/tests/test_math.py
@@ -1,13 +1,33 @@
 import numpy
 from wally.statistic import rebin_histogram
 from wally.result_classes import DataSource, TimeSeries
-from wally.data_selectors import interpolate_ts_on_seconds_border, c_interpolate_ts_on_seconds_border
+from wally.data_selectors import c_interpolate_ts_on_seconds_border
+from wally.utils import unit_conversion_coef
 
 
 def array_eq(x: numpy.array, y: numpy.array, max_diff: float = 1E-3) -> bool:
     return numpy.abs(x - y).max() <= max_diff
 
 
+def test_conversion_coef():
+    units = [
+        ('x', 'mx', 1000),
+        ('Gx', 'Kx', 1000 ** 2),
+        ('Gx', 'x', 1000 ** 3),
+        ('x', 'Kix', 1.0 / 1024),
+        ('x', 'Mix', 1.0 / 1024 ** 2),
+        ('mx', 'Mix', 0.001 / 1024 ** 2),
+        ('Mix', 'Kix', 1024),
+        ('Kix', 'ux', 1024 * 1000 ** 2),
+    ]
+
+    for unit1, unit2, coef in units:
+        cc = float(unit_conversion_coef(unit1, unit2))
+        assert abs(cc / coef - 1) < 1E-5, "{} => {} == {}".format(unit1, unit2, cc)
+        rcc = float(unit_conversion_coef(unit2, unit1))
+        assert abs(rcc * cc - 1) < 1E-5, "{} => {} == {}".format(unit1, unit2, rcc)
+
+
 def test_rebin_histo():
     curr_histo = numpy.empty((100,), dtype=int)
     curr_histo[:] = 1
@@ -51,6 +71,8 @@
     ms_coef = 1000
     s_offset = 377 * ms_coef
     ms_offset = 300 + s_offset
+    borders = 10
+    block_size = 20
 
     for i in range(16):
         source_times = numpy.random.randint(100, size=samples, dtype='uint64') + \
@@ -60,24 +82,13 @@
         ts = TimeSeries("test", raw=None, data=source_values, times=source_times, units=DATA_UNITS,
                         source=ds, time_units=TIME_UNITS)
 
-        # ts2 = interpolate_ts_on_seconds_border(ts)
         ts2 = c_interpolate_ts_on_seconds_border(ts, nc=True)
 
-        # print()
-        # print(ts.times)
-        # print(ts.data, ts.data.sum())
-        # print(ts2.times)
-        # print(ts2.data, ts2.data.sum())
-
         assert ts.time_units == 'ms'
         assert ts2.time_units == 's'
         assert ts2.times.dtype == ts.times.dtype
         assert ts2.data.dtype == ts.data.dtype
 
-        assert ts.data.sum() == ts2.data.sum()
-
-        borders = 5
-        block_size = samples // 10
         for begin_idx in numpy.random.randint(borders, samples - borders, size=20):
             begin_idx = int(begin_idx)
             end_idx = min(begin_idx + block_size, ts.times.size - 1)
@@ -92,3 +103,36 @@
             ts2_min = ts.data[ts2_begin_idx + 1: ts2_end_idx - 1].sum()
 
             assert ts2_min <= ts_sum <= ts2_max, "NOT {} <= {} <= {}".format(ts2_min, ts_sum, ts2_max)
+
+
+def test_interpolate_qd():
+    ds = DataSource(node_id=NODE_ID, sensor=SENSOR, dev=DEV, metric=METRIC)
+    samples = 200
+    ms_coef = 1000
+    s_offset = 377 * ms_coef
+    ms_offset = 300 + s_offset
+
+    for i in range(16):
+        source_times = numpy.random.randint(100, size=samples, dtype='uint64') + \
+            ms_coef * numpy.arange(samples, dtype='uint64') + s_offset + ms_offset
+        source_values = numpy.random.randint(30, 60, size=samples, dtype='uint64')
+
+        ts = TimeSeries("test", raw=None, data=source_values, times=source_times, units=DATA_UNITS,
+                        source=ds, time_units=TIME_UNITS)
+
+        ts2 = c_interpolate_ts_on_seconds_border(ts, nc=True, qd=True)
+
+        assert ts.time_units == 'ms'
+        assert ts2.time_units == 's'
+        assert ts2.times.dtype == ts.times.dtype
+        assert ts2.data.dtype == ts.data.dtype
+        assert ts2.data.size == ts2.times.size
+        assert abs(ts2.data.size - ts.data.size) <= 1
+
+        coef = unit_conversion_coef(ts2.time_units, ts.time_units)
+        assert isinstance(coef, int)
+
+        dtime = (ts2.times[1] - ts2.times[0]) * coef // 2
+
+        idxs = numpy.searchsorted(ts.times, ts2.times * coef - dtime)
+        assert (ts2.data == ts.data[idxs]).all()
