mirror of
https://github.com/mudler/luet.git
synced 2025-08-01 15:28:20 +00:00
Normalize input data beforeahead
This commit is contained in:
parent
6e7cef4710
commit
86472e7bf5
@ -147,18 +147,30 @@ func DecodePackage(ID string) (Package, error) {
|
||||
return p, nil
|
||||
}
|
||||
|
||||
func NormalizeFlagged(p Package) {
|
||||
for _, r := range p.GetRequires() {
|
||||
r.IsFlagged(true)
|
||||
NormalizeFlagged(r)
|
||||
}
|
||||
for _, r := range p.GetConflicts() {
|
||||
r.IsFlagged(true)
|
||||
NormalizeFlagged(r)
|
||||
}
|
||||
}
|
||||
|
||||
func (p *DefaultPackage) BuildFormula() ([]bf.Formula, error) {
|
||||
encodedA, err := p.IsFlagged(true).Encode()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
NormalizeFlagged(p)
|
||||
|
||||
A := bf.Var(encodedA)
|
||||
|
||||
var formulas []bf.Formula
|
||||
|
||||
for _, required := range p.PackageRequires {
|
||||
encodedB, err := required.IsFlagged(true).Encode()
|
||||
encodedB, err := required.Encode()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -174,7 +186,7 @@ func (p *DefaultPackage) BuildFormula() ([]bf.Formula, error) {
|
||||
}
|
||||
|
||||
for _, required := range p.PackageConflicts {
|
||||
encodedB, err := required.IsFlagged(true).Encode()
|
||||
encodedB, err := required.Encode()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -37,10 +37,10 @@ type Solver struct {
|
||||
|
||||
func NewSolver(init []pkg.Package, w []pkg.Package) PackageSolver {
|
||||
for _, v := range init {
|
||||
v.IsFlagged(true)
|
||||
pkg.NormalizeFlagged(v)
|
||||
}
|
||||
for _, v := range w {
|
||||
v.IsFlagged(true)
|
||||
pkg.NormalizeFlagged(v)
|
||||
}
|
||||
return &Solver{Installed: init, World: w}
|
||||
}
|
||||
@ -111,7 +111,7 @@ func (s *Solver) BuildFormula() (bf.Formula, error) {
|
||||
return nil, err
|
||||
}
|
||||
for _, wanted := range s.Wanted {
|
||||
encodedW, err := wanted.IsFlagged(true).Encode()
|
||||
encodedW, err := wanted.Encode()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -123,7 +123,7 @@ func (s *Solver) BuildFormula() (bf.Formula, error) {
|
||||
}
|
||||
|
||||
for _, installed := range s.Installed {
|
||||
encodedI, err := installed.IsFlagged(true).Encode()
|
||||
encodedI, err := installed.Encode()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -190,4 +190,30 @@ var _ = Describe("Solver", func() {
|
||||
|
||||
})
|
||||
|
||||
Context("Complex data sets", func() {
|
||||
It("Solves them correctly", func() {
|
||||
C := pkg.NewPackage("C", "", []*pkg.DefaultPackage{}, []*pkg.DefaultPackage{})
|
||||
E := pkg.NewPackage("E", "", []*pkg.DefaultPackage{}, []*pkg.DefaultPackage{})
|
||||
F := pkg.NewPackage("F", "", []*pkg.DefaultPackage{}, []*pkg.DefaultPackage{})
|
||||
G := pkg.NewPackage("G", "", []*pkg.DefaultPackage{}, []*pkg.DefaultPackage{})
|
||||
H := pkg.NewPackage("H", "", []*pkg.DefaultPackage{G}, []*pkg.DefaultPackage{})
|
||||
D := pkg.NewPackage("D", "", []*pkg.DefaultPackage{H}, []*pkg.DefaultPackage{})
|
||||
B := pkg.NewPackage("B", "", []*pkg.DefaultPackage{D}, []*pkg.DefaultPackage{})
|
||||
A := pkg.NewPackage("A", "", []*pkg.DefaultPackage{B}, []*pkg.DefaultPackage{})
|
||||
|
||||
s := NewSolver([]pkg.Package{C}, []pkg.Package{A, B, C, D, E, F, G})
|
||||
|
||||
solution, err := s.Install([]pkg.Package{A})
|
||||
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(solution).To(ContainElement(PackageAssert{Package: H.IsFlagged(true), Value: true}))
|
||||
Expect(solution).To(ContainElement(PackageAssert{Package: G.IsFlagged(true), Value: true}))
|
||||
|
||||
Expect(len(solution)).To(Equal(6))
|
||||
Expect(err).ToNot(HaveOccurred())
|
||||
})
|
||||
})
|
||||
|
||||
})
|
||||
|
Loading…
Reference in New Issue
Block a user