Subject: Re: [PATCH v2 06/21] bisect: add test for the bisect algorithm

From: Junio C Hamano <[email-masked]>
Date: Fri, 15 Apr 2016 14:13:42 -0700

Stephan Beyer <[email-masked]> writes:

> +test_expect_success 'bisect algorithm works in linear history with an odd number of commits' '
> +	git bisect start A7 &&
> +	git bisect next &&
> +	test_cmp_rev HEAD A3 A4
> +'
> +
> +test_expect_success 'bisect algorithm works in linear history with an even number of commits' '
> +	git bisect reset &&
> +	git bisect start A8 &&
> +	git bisect next &&
> +	test_cmp_rev HEAD A4
> +'
> +
> +test_expect_success 'bisect algorithm works with a merge' '
> +	git bisect reset &&
> +	git bisect start Bmerge &&
> +	git bisect next &&
> +	test_cmp_rev HEAD A5 &&
> +	git bisect good &&
> +	test_cmp_rev HEAD A8 &&
> +	git bisect good &&
> +	test_cmp_rev HEAD B1 B2
> +'
> +
> +#                   | w  min | w  min | w  min | w  min |
> +# B---.    BCDmerge | 18  0  | 9    0 | 5    0 | 3    0 |
> +# |\ \ \            |        |        |        |        |
> +# | | | *  D2       | 5   5  | 2    2 | 2    2*| good   |
> +# | | | *  D1       | 4   4  | 1    1 | 1    1 | good   |
> +# | | * |  C3       | 10  8  | 1    1 | 1    1 | 1    1*|
> +# | | * |  C2       | 9   9 *| good   | good   | good   |
> +# | | * |  C1       | 8   8  | good   | good   | good   |
> +# | * | |  B3       | 8   8  | 3    3 | 1    1 | 1    1*|
> +# * | | |  Bmerge   | 11  7  | 4    4*| good   | good   |
> +# |\ \ \ \          |        |        |        |        |
> +# | |/ / /          |        |        |        |        |
> +# | * | |  B2       | 7   7  | 2    2 | good   | good   |
> +# | * | |  B1       | 6   6  | 1    1 | good   | good   |
> +# * | | |  A8       | 8   8  | 1    1 | good   | good   |
> +# | |/ /            |        |        |        |        |
> +# |/| |             |        |        |        |        |
> +# * | |   A7        | 7   7  | good   | good   | good   |
> +# * | |   A6        | 6   6  | good   | good   | good   |
> +# |/ /              |        |        |        |        |
> +# * |     A5        | 5   5  | good   | good   | good   |
> +# * |     A4        | 4   4  | good   | good   | good   |
> +# |/                |        |        |        |        |
> +# *       A3        | 3   3  | good   | good   | good   |
> +# *       A2        | 2   2  | good   | good   | good   |
> +# *       A1        | 1   1  | good   | good   | good   |

Nice drawing.  With this, it is easy to see how the first three
examples above are testing the right thing, too.  It is not
immediately clear what these asterisks in the table are trying to
say, though (the same comment applies to the other drawing below).

> +test_expect_success 'bisect algorithm works with octopus merge' '
> +	git bisect reset &&
> +	git bisect start BCDmerge &&
> +	git bisect next &&
> +	test_cmp_rev HEAD C2 &&
> +	git bisect good &&
> +	test_cmp_rev HEAD Bmerge &&
> +	git bisect good &&
> +	test_cmp_rev HEAD D2 &&
> +	git bisect good &&
> +	test_cmp_rev HEAD B3 C3 &&
> +	git bisect good &&
> +	test_cmp_rev HEAD C3 B3 &&
> +	git bisect good > output &&
> +	grep "$(git rev-parse BCDmerge) is the first bad commit" output
> +'
> +
> +# G 5a6bcdf        D3       | w  min | w  min |
> +# | B 02f2eed      A9       | 14  0  | 7   0  |
> +# | *---. 6174c5c  BCDmerge | 13  1  | 6   1  |
> +# | |\ \ \                  |        |        |
> +# | |_|_|/                  |        |        |
> +# |/| | |                   |        |        |
> +# G | | | a6d6dab  D2       | good   | good   |
> +# * | | | 86414e4  D1       | good   | good   |
> +# | | | * c672402  C3       | 7   7 *| good   |
> +# | | | * 0555272  C2       | 6   6  | good   |
> +# | | | * 28c2b2a  C1       | 5   5  | good   |
> +# | | * | 4b5a7d9  B3       | 5   5  | 3   3 *|
> +# | * | | a419ab7  Bmerge   | 8   6  | 4   3 *|
> +# | |\ \ \                  |        |        |
> +# | | |/ /                  |        |        |
> +# | | * | 4fa1e39  B2       | 4   4  | 2   2  |
> +# | | * | 92a014d  B1       | 3   3  | 1   1  |
> +# | * | | 79158c7  A8       | 5   5  | 1   1  |
> +# | | |/                    |        |        |
> +# | |/|                     |        |        |
> +# | * | 237eb73    A7       | 4   4  | good   |
> +# | * | 3b2f811    A6       | 3   3  | good   |
> +# | |/                      |        |        |
> +# | * 0f2b6d2      A5       | 2   2  | good   |
> +# | * 1fcdaf0      A4       | 1   1  | good   |
> +# |/                        |        |        |
> +# * 096648b        A3       | good   | good   |
> +# * 1cf01b8        A2       | good   | good   |
> +# * 6623165        A1       | good   | good   |
> +
> +test_expect_success 'bisect algorithm works with good commit on unrelated branch' '
> +	git bisect reset &&
> +	git bisect start A9 D3 &&
> +	test_cmp_rev HEAD "$(git merge-base A9 D3)" &&
> +	test_cmp_rev HEAD D2 &&
> +	git bisect good &&
> +	test_cmp_rev HEAD C3 &&
> +	git bisect good &&
> +	test_cmp_rev HEAD B3 Bmerge
> +'
> +
> +test_done