git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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

From
Junio C Hamano <gitster@pobox.com>
Date
Apr 15, 2016, 21:13 UTC
Message-ID
<xmqqlh4ea83d.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<1460294354-7031-7-git-send-email-s-beyer@gmx.net>
Stephan Beyer <s-beyer@gmx.net> writes:
Show 50 quoted lines
> +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).

Show 59 quoted lines
> +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
Previous: Stephan BeyerNext: Stephan Beyer
Message 19 of 56 in “git bisect improvements”
  1. 00/21 git bisect improvementsStephan Beyer, Apr 10, 2016
  2. 01/21 bisect: write about `bisect next` in documentationStephan Beyer, Apr 10, 2016
  3. 02/21 bisect: allow 'bisect run' if no good commit is knownStephan Beyer, Apr 10, 2016
  4. 03/21 t/test-lib-functions.sh: generalize test_cmp_revStephan Beyer, Apr 10, 2016
  5. Eric SunshineApr 11, 2016
  6. Junio C HamanoApr 15, 2016
  7. Stephan BeyerApr 24, 2016
  8. Junio C HamanoApr 25, 2016
  9. 04/21 t: use test_cmp_rev() where appropriateStephan Beyer, Apr 10, 2016
  10. Eric SunshineApr 11, 2016
  11. Junio C HamanoApr 15, 2016
  12. 05/21 t6030: generalize test to not rely on current implementationStephan Beyer, Apr 10, 2016
  13. Torsten BögershausenApr 10, 2016
  14. Junio C HamanoApr 10, 2016
  15. Stephan BeyerApr 10, 2016
  16. Eric SunshineApr 11, 2016
  17. Junio C HamanoApr 15, 2016
  18. 06/21 bisect: add test for the bisect algorithmStephan Beyer, Apr 10, 2016
  19. Junio C HamanoApr 15, 2016
  20. 07/21 bisect: plug the biggest memory leakStephan Beyer, Apr 10, 2016
  21. Junio C HamanoApr 15, 2016
  22. 08/21 bisect: make bisect compile if DEBUG_BISECT is setStephan Beyer, Apr 10, 2016
  23. Junio C HamanoApr 15, 2016
  24. 09/21 bisect: make algorithm behavior independent of DEBUG_BISECTStephan Beyer, Apr 10, 2016
  25. Junio C HamanoApr 15, 2016
  26. 10/21 bisect: get rid of recursion in count_distance()Stephan Beyer, Apr 10, 2016
  27. Junio C HamanoApr 15, 2016
  28. 11/21 bisect: use struct node_data array instead of int arrayStephan Beyer, Apr 10, 2016
  29. Christian CouderApr 12, 2016
  30. Junio C HamanoApr 15, 2016
  31. 12/21 bisect: replace clear_distance() by unique markersStephan Beyer, Apr 10, 2016
  32. Christian CouderApr 12, 2016
  33. Junio C HamanoApr 15, 2016
  34. 13/21 bisect: use commit instead of commit list as arguments when appropriateStephan Beyer, Apr 10, 2016
  35. Junio C HamanoApr 15, 2016
  36. 14/21 bisect: extract get_distance() function from code duplicationStephan Beyer, Apr 10, 2016
  37. Junio C HamanoApr 15, 2016
  38. 15/21 bisect: introduce distance_direction()Stephan Beyer, Apr 10, 2016
  39. Junio C HamanoApr 15, 2016
  40. 16/21 bisect: make total number of commits globalStephan Beyer, Apr 10, 2016
  41. Christian CouderApr 13, 2016
  42. Junio C HamanoApr 15, 2016
  43. Junio C HamanoApr 16, 2016
  44. 17/21 bisect: rename count_distance() to compute_weight()Stephan Beyer, Apr 10, 2016
  45. Christian CouderApr 13, 2016
  46. Junio C HamanoApr 15, 2016
  47. 18/21 bisect: prepare for different algorithms based on find_allStephan Beyer, Apr 10, 2016
  48. Junio C HamanoApr 15, 2016
  49. 19/21 bisect: use a bottom-up traversal to find relevant weightsStephan Beyer, Apr 10, 2016
  50. Christian CouderApr 13, 2016
  51. Junio C HamanoApr 15, 2016
  52. Junio C HamanoApr 15, 2016
  53. Junio C HamanoApr 26, 2016
  54. 20/21 bisect: compute best bisection in compute_relevant_weights()Stephan Beyer, Apr 10, 2016
  55. 21/21 bisect: get back halfway shortcutStephan Beyer, Apr 10, 2016
  56. Junio C HamanoApr 15, 2016

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.