diff --git a/pkg/solver/solver.go b/pkg/solver/solver.go index 62a7e95d..c01f32a0 100644 --- a/pkg/solver/solver.go +++ b/pkg/solver/solver.go @@ -82,6 +82,10 @@ func (s *Solver) BuildFormula() (bf.Formula, error) { return nil, err } W := bf.Var(encodedW) + if len(s.Installed) == 0 { + formulas = append(formulas, bf.And(bf.True, W)) + continue + } for _, installed := range s.Installed { encodedI, err := installed.IsFlagged(true).Encode() if err != nil { diff --git a/pkg/solver/solver_test.go b/pkg/solver/solver_test.go index 099fffed..6124cc8f 100644 --- a/pkg/solver/solver_test.go +++ b/pkg/solver/solver_test.go @@ -38,6 +38,7 @@ var _ = Describe("Solver", func() { Expect(solution).To(ContainElement(PackageAssert{Package: A.IsFlagged(true), Value: true})) Expect(solution).To(ContainElement(PackageAssert{Package: B.IsFlagged(true), Value: true})) Expect(solution).To(ContainElement(PackageAssert{Package: C.IsFlagged(true), Value: true})) + Expect(len(solution)).To(Equal(3)) }) It("Solves correctly more complex ones", func() { C := pkg.NewPackage("C", "", []*pkg.DefaultPackage{}, []*pkg.DefaultPackage{}) @@ -52,6 +53,26 @@ var _ = Describe("Solver", func() { Expect(solution).To(ContainElement(PackageAssert{Package: A.IsFlagged(true), Value: true})) Expect(solution).To(ContainElement(PackageAssert{Package: B.IsFlagged(true), Value: true})) Expect(solution).To(ContainElement(PackageAssert{Package: D.IsFlagged(true), Value: true})) + Expect(solution).To(ContainElement(PackageAssert{Package: C.IsFlagged(true), Value: true})) + Expect(len(solution)).To(Equal(4)) + Expect(err).ToNot(HaveOccurred()) + }) + + It("Solves correctly more complex ones", func() { + // E := pkg.NewPackage("E", "", []*pkg.DefaultPackage{}, []*pkg.DefaultPackage{}) + + C := pkg.NewPackage("C", "", []*pkg.DefaultPackage{}, []*pkg.DefaultPackage{}) + D := pkg.NewPackage("D", "", []*pkg.DefaultPackage{}, []*pkg.DefaultPackage{}) + B := pkg.NewPackage("B", "", []*pkg.DefaultPackage{D}, []*pkg.DefaultPackage{}) + A := pkg.NewPackage("A", "", []*pkg.DefaultPackage{B}, []*pkg.DefaultPackage{}) + + s := NewSolver([]pkg.Package{A}, []pkg.Package{}, []pkg.Package{A, B, C, D}) + + solution, err := s.Solve() + Expect(solution).To(ContainElement(PackageAssert{Package: A.IsFlagged(true), Value: true})) + Expect(solution).To(ContainElement(PackageAssert{Package: B.IsFlagged(true), Value: true})) + Expect(solution).To(ContainElement(PackageAssert{Package: D.IsFlagged(true), Value: true})) + Expect(len(solution)).To(Equal(3)) Expect(err).ToNot(HaveOccurred()) })