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

        degree = 2
        ans = [[1225.0, 0, 0, 0, 0, 0],
               [0.0, 2450.0, 0, 0, 0, 0],
               [665.0, 980.0, 140.0, 0, 0, 0],
               [0.0, 1330.0, 1960.0, 280.0, 0, 0],
               [361.0, 1064.0, 936.0, 224.0, 16.0, 0],
               [0.0, 722.0, 2128.0, 1872.0, 448.0, 32.0]]
        self.assertEqual(cs.generate(f, N, h, X, degree), ans)
    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)