def METHOD_NAME(self):
    trees = [
        TreeNode.read(
            io.StringIO("(A,(B,(H,(D,(J,(((G,E),(F,I)),C))))));")),
        TreeNode.read(
            io.StringIO("(A,(B,(D,((J,H),(((G,E),(F,I)),C)))));")),
        TreeNode.read(
            io.StringIO("(A,(B,(D,(H,(J,(((G,E),(F,I)),C))))));")),
        TreeNode.read(
            io.StringIO("(A,(B,(E,(G,((F,I),((J,(H,D)),C))))));")),
        TreeNode.read(
            io.StringIO("(A,(B,(E,(G,((F,I),(((J,H),D),C))))));")),
        TreeNode.read(
            io.StringIO("(A,(B,(E,((F,I),(G,((J,(H,D)),C))))));")),
        TreeNode.read(
            io.StringIO("(A,(B,(E,((F,I),(G,(((J,H),D),C))))));")),
        TreeNode.read(
            io.StringIO("(A,(B,(E,((G,(F,I)),((J,(H,D)),C)))));")),
        TreeNode.read(
            io.StringIO("(A,(B,(E,((G,(F,I)),(((J,H),D),C)))));"))]
    exp = TreeNode.read(io.StringIO("(((E,(G,(F,I),(C,(D,J,H)))),B),A);"))
    obs = majority_rule(trees)
    self.assertEqual(exp.compare_subsets(obs[0]), 0.0)
    self.assertEqual(len(obs), 1)
    tree = obs[0]
    exp_supports = sorted([9.0, 9.0, 9.0, 6.0, 6.0, 6.0])
    obs_supports = sorted([n.support for n in tree.non_tips()])
    self.assertEqual(obs_supports, exp_supports)
    obs = majority_rule(trees, weights=np.ones(len(trees)) * 2)
    self.assertEqual(exp.compare_subsets(obs[0]), 0.0)
    self.assertEqual(len(obs), 1)
    tree = obs[0]
    exp_supports = sorted([18.0, 18.0, 12.0, 18.0, 12.0, 12.0])
    obs_supports = sorted([n.support for n in tree.non_tips()])
    with self.assertRaises(ValueError):
        majority_rule(trees, weights=[1, 2])