--- /dev/null
+#
+#Rule #2:
+# !A-2-1.noarch [3] (w1)
+# B-2-1.noarch [4] (w2)
+# C-2-1.noarch [5]
+#
+# ==> Choice Rule
+# !A-2-1.noarch [3] (w1)
+# B-2-1.noarch [4] (w2)
+#
+repo system 0 testtags <inline>
+#>=Pkg: B 1 1 noarch
+#>=Prv: P = 1
+repo available 0 testtags <inline>
+#>=Pkg: A 2 1 noarch
+#>=Req: P = 2
+#>=Pkg: B 2 1 noarch
+#>=Prv: P = 2
+#>=Pkg: C 2 1 noarch
+#>=Prv: P = 2
+system i686 rpm system
+
+job install name A
+result transaction,problems <inline>
+result transaction,problems <inline>
+#>install A-2-1.noarch@available
+#>upgrade B-1-1.noarch@system B-2-1.noarch@available
--- /dev/null
+repo system 0 testtags <inline>
+#>=Pkg: B 1 1 noarch
+#>=Prv: P = 1
+repo available 0 testtags <inline>
+#>=Pkg: X 1 1 noarch
+#>=Pkg: Y 1 1 noarch
+#>=Pkg: A 2 1 noarch
+#>=Req: P = 2 <IF> (X & Y)
+#>=Pkg: B 2 1 noarch
+#>=Prv: P = 2
+#>=Pkg: C 2 1 noarch
+#>=Prv: P = 2
+system i686 rpm system
+
+job install name A
+result transaction,problems <inline>
+result transaction,problems <inline>
+#>install A-2-1.noarch@available
+#
+# Test that updating package B will update package A
+# instead of pulling in new package C
+#
+#Rule #5:
+# !A-2-2.noarch [5] (w1)
+# B-2-1.noarch [6] (w2)
+# C-2-1.noarch [8]
+#Rule #7:
+# !A-2-1.noarch [4] (w1)
+# B-2-1.noarch [6] (w2)
+# C-2-1.noarch [8]
+#Rule #8:
+# !A-1-1.noarch [2]I (w1)
+# B-1-1.noarch [3]I (w2)
+# C-1-1.noarch [7]
+#
+# ==> Choice Rule for #8:
+# !A-1-1.noarch [2]I (w1)
+# B-1-1.noarch [3]I (w2)
+#
repo system 0 testtags <inline>
#>=Pkg: A 1 1 noarch
#>=Req: P = 1
--- /dev/null
+#
+# Test that updating package B will update package A
+# instead of pulling in new package C
+#
+#Rule #5:
+# !A-2-2.noarch [5] (w1)
+# B-2-1.noarch [6] (w2)
+# C-2-1.noarch [8]
+#Rule #7:
+# !A-2-1.noarch [4] (w1)
+# B-2-1.noarch [6] (w2)
+# C-2-1.noarch [8]
+#Rule #8:
+# !A-1-1.noarch [2]I (w1)
+# B-1-1.noarch [3]I (w2)
+# C-1-1.noarch [7]
+#
+# ==> Choice Rule for #8:
+# !A-1-1.noarch [2]I (w1)
+# B-1-1.noarch [3]I (w2)
+#
+repo system 0 testtags <inline>
+#>=Pkg: A 1 1 noarch
+#>=Req: P = 1
+#>=Pkg: B 1 1 noarch
+#>=Prv: P = 1
+repo available 0 testtags <inline>
+#>=Pkg: A 1 1 noarch
+#>=Req: P = 1
+#>=Pkg: B 1 1 noarch
+#>=Prv: P = 1
+#>=Pkg: A 2 1 noarch
+#>=Req: P = 2
+#>=Pkg: A 2 2 noarch
+#>=Req: P = 2
+#>=Pkg: B 2 1 noarch
+#>=Prv: P = 2
+#>=Pkg: C 1 1 noarch
+#>=Prv: P = 1
+#>=Pkg: C 2 1 noarch
+#>=Prv: P = 2
+system i686 rpm system
+
+job update name B
+result transaction,problems <inline>
+#>upgrade A-1-1.noarch@system A-2-2.noarch@available
+#>upgrade B-1-1.noarch@system B-2-1.noarch@available
+# Do not block an update because of a choice rule
+#
+#Rule #3:
+# !B-1-1.noarch [4] (w1)
+# A-1-1.noarch [2]I (w2)
+# Anew-2-1.noarch [6]
+#Rule #4:
+# !B-1-1.noarch [3]I (w1)
+# A-1-1.noarch [2]I (w2)
+# Anew-2-1.noarch [6]
+#
+# ==> No choice rule for Rule#4!
+# ==> Choice Rule for #3:
+# !B-1-1.noarch [4] (w1)
+# A-1-1.noarch [2]I (w2)
+#
repo system 0 testtags <inline>
#>=Pkg: A 1 1 noarch
#>=Prv: libA
--- /dev/null
+# Do not block an update because of a choice rule
+#
+#Rule #3:
+# !B-1-1.noarch [4] (w1)
+# A-1-1.noarch [2]I (w2)
+# Anew-2-1.noarch [6]
+#Rule #4:
+# !B-1-1.noarch [3]I (w1)
+# A-1-1.noarch [2]I (w2)
+# Anew-2-1.noarch [6]
+#
+# ==> No choice rule for Rule#4!
+# ==> Choice Rule for #3:
+# !B-1-1.noarch [4] (w1)
+# A-1-1.noarch [2]I (w2)
+#
+repo system 0 testtags <inline>
+#>=Pkg: A 1 1 noarch
+#>=Prv: libA
+#>=Pkg: B 1 1 noarch
+#>=Req: libA
+repo available 0 testtags <inline>
+#>=Pkg: A 2 1 noarch
+#>=Pkg: Anew 2 1 noarch
+#>=Prv: libA
+system i686 rpm system
+
+job update all packages
+result transaction,problems <inline>
+#>install Anew-2-1.noarch@available
+#>upgrade A-1-1.noarch@system A-2-1.noarch@available
+# This tests that A is updated instead of Anew being installed
+#
+#Rule #4:
+# !B-2-2.noarch [11] (w1)
+# A-2-2.noarch [9] (w2)
+# Anew-2-2.noarch [10]
+#Rule #11:
+# !B-2-1.noarch [8] (w1)
+# A-2-1.noarch [6] (w2)
+# Anew-2-1.noarch [7]
+#
+#Choice Rule for #4:
+# !B-2-2.noarch [11] (w1)
+# A-2-2.noarch [9] (w2)
+#Choice Rule for #11
+# !B-2-1.noarch [8] (w1)
+# A-2-1.noarch [6] (w2)
+#
repo system 0 testtags <inline>
#>=Pkg: A 1 1 noarch
#>=Prv: libA = 1-1
--- /dev/null
+#
+# test that a package split does not update unrelated packages
+#
+repo system 0 testtags <inline>
+#>=Pkg: A 1 1 noarch
+#>=Prv: libA
+#>=Pkg: B 1 1 noarch
+#>=Req: libA
+repo available 0 testtags <inline>
+#>=Pkg: A 1 1 noarch
+#>=Prv: libA
+#>=Pkg: A 2 1 noarch
+#>=Pkg: Asplit 2 1 noarch
+#>=Prv: libA
+#>=Pkg: B 2 1 noarch
+#>=Req: libA
+system i686 rpm system
+job update name A
+result transaction,problems <inline>
+#>install Asplit-2-1.noarch@available
+#>upgrade A-1-1.noarch@system A-2-1.noarch@available
--- /dev/null
+#Rule #4:
+# !php-fpm-7.2.24-1.noarch [5] (w1)
+# glibc-2.17-325.noarch [2]I (w2)
+# libcrypt-4.1.1-6.noarch [7]
+#=> no choice rule for #4
+#
+repo @System 0 testtags <inline>
+#>=Pkg: glibc 2.17 325 noarch
+#>=Prv: libcrypt
+#>=Pkg: php 5.4.16 48 noarch
+repo available 0 testtags <inline>
+#>=Pkg: php 7.2.24 1 noarch
+#>=Rec: php-fpm = 7.2.24-1
+#>=Pkg: php-fpm 7.2.24 1 noarch
+#>=Req: libcrypt
+#>=Pkg: php-fpm 8.0.13 2 noarch
+#>=Req: libcrypt
+#>=Pkg: libcrypt 4.1.1 6 noarch
+#>=Req: libc
+#>=Pkg: glibc 2.28 181 noarch
+#>=Prv: libc
+system i686 rpm @System
+job update all packages
+result transaction,problems <inline>
+#>install libcrypt-4.1.1-6.noarch@available
+#>install php-fpm-7.2.24-1.noarch@available
+#>upgrade glibc-2.17-325.noarch@@System glibc-2.28-181.noarch@available
+#>upgrade php-5.4.16-48.noarch@@System php-7.2.24-1.noarch@available