Skip to content

Commit 4fd527f

Browse files
authored
Ensure that ext req expression satisfiability accounts for absence of ext (#540)
1 parent d2001e6 commit 4fd527f

File tree

1 file changed

+9
-5
lines changed

1 file changed

+9
-5
lines changed

lib/arch_obj_models/obj.rb

+9-5
Original file line numberDiff line numberDiff line change
@@ -727,7 +727,9 @@ def eval(term_values)
727727
if @type == :term
728728
ext_ret = @children[0]
729729
term_value = term_values.find { |tv| tv.name == ext_ret.name }
730-
@children[0].satisfied_by?(term_value)
730+
unless term_value.nil?
731+
@children[0].satisfied_by?(term_value)
732+
end
731733
elsif @type == :if
732734
cond_ext_ret = @children[0]
733735
if cond_ext_ret.eval(term_values)
@@ -921,15 +923,17 @@ def dnf(logic_tree)
921923
end
922924

923925
def combos_for(extension_versions)
924-
ncombos = extension_versions.reduce(1) { |prod, vers| prod * vers.size }
926+
ncombos = extension_versions.reduce(1) { |prod, vers| prod * (vers.size + 1) }
925927
combos = []
926928
ncombos.times do |i|
927929
combos << []
928930
extension_versions.size.times do |j|
929-
m = extension_versions[j].size
930-
d = j.zero? ? 1 : extension_versions[j..0].reduce(1) { |prod, vers| prod * vers.size }
931+
m = (extension_versions[j].size + 1)
932+
d = j.zero? ? 1 : extension_versions[j..0].reduce(1) { |prod, vers| prod * (vers.size + 1) }
931933

932-
combos.last << extension_versions[j][(i / d) % m]
934+
if (i / d) % m < extension_versions[j].size
935+
combos.last << extension_versions[j][(i / d) % m]
936+
end
933937
end
934938
end
935939
# get rid of any combos that can't happen because of extension conflicts

0 commit comments

Comments
 (0)