def test_generate_and_lll(self):
        h = 3
        N = 35
        f = [19, 14, 1]
        degree = 2
        k = 2
        X = math.ceil(
            (pow(2, - 1 / 2) * pow(h * k, -1 / (h * k - 1))) * pow(N, (h - 1) / (h * k - 1))) - 1
        gen = cs.generate(f, N, h, degree, X)

        ans = [[3, 8 * 2, -24 * 2 * 2, -8 * pow(2, 3), -1 * pow(2, 4), 2 * pow(2, 5)],
               [49, 50 * 2, 0 * 2 * 2, 20 *
                   pow(2, 3), 0 * pow(2, 4), 2 * pow(2, 5)],
               [115, -83 * 2, 4 * 2 * 2, 13 *
                   pow(2, 3), 6 * pow(2, 4), 2 * pow(2, 5)],
               [61, 16 * 2, 37 * 2 * 2, -16 *
                   pow(2, 3), 3 * pow(2, 4), 4 * pow(2, 5)],
               [21, -37 * 2, -14 * 2 * 2, 2 *
                   pow(2, 3), 14 * pow(2, 4), -4 * pow(2, 5)],
               [-201, 4 * 2, 33 * 2 * 2, -4 * pow(2, 3), -3 * pow(2, 4), 1 * pow(2, 5)]]

        self.assertEqual(cs.lll(gen), ans)
 def test_lll_two(self):
     data = [[201, 37], [1648, 297]]
     ans = [[1, 32], [40, 1]]
     self.assertEqual(cs.lll(data, 0.75), ans)
 def test_lll_three(self):
     data = [[15, 23, 11], [46, 15, 3], [32, 1, 1]]
     ans = [[1, 9, 9], [13, 5, -7], [6, -9, 15]]
     self.assertEqual(cs.lll(data, 0.75), data)
 def test_lll_one(self):
     data = [[1, 1, 1], [-1, 0, 2], [3, 5, 6]]
     ans = [[0, 1, 0], [1, 0, 1], [-1, 0, 2]]
     self.assertEqual(cs.lll(data, 0.75), ans)