| #!/bin/sh | 
 |  | 
 | test_description='test @{-N} syntax' | 
 |  | 
 | . ./test-lib.sh | 
 |  | 
 |  | 
 | make_commit () { | 
 | 	echo "$1" > "$1" && | 
 | 	git add "$1" && | 
 | 	git commit -m "$1" | 
 | } | 
 |  | 
 |  | 
 | test_expect_success 'setup' ' | 
 |  | 
 | 	make_commit 1 && | 
 | 	git branch side && | 
 | 	make_commit 2 && | 
 | 	make_commit 3 && | 
 | 	git checkout side && | 
 | 	make_commit 4 && | 
 | 	git merge master && | 
 | 	git checkout master | 
 |  | 
 | ' | 
 |  | 
 | # 1 -- 2 -- 3 master | 
 | #  \         \ | 
 | #   \         \ | 
 | #    --- 4 --- 5 side | 
 | # | 
 | # and 'side' should be the last branch | 
 |  | 
 | test_rev_equivalent () { | 
 |  | 
 | 	git rev-parse "$1" > expect && | 
 | 	git rev-parse "$2" > output && | 
 | 	test_cmp expect output | 
 |  | 
 | } | 
 |  | 
 | test_expect_success '@{-1} works' ' | 
 | 	test_rev_equivalent side @{-1} | 
 | ' | 
 |  | 
 | test_expect_success '@{-1}~2 works' ' | 
 | 	test_rev_equivalent side~2 @{-1}~2 | 
 | ' | 
 |  | 
 | test_expect_success '@{-1}^2 works' ' | 
 | 	test_rev_equivalent side^2 @{-1}^2 | 
 | ' | 
 |  | 
 | test_expect_success '@{-1}@{1} works' ' | 
 | 	test_rev_equivalent side@{1} @{-1}@{1} | 
 | ' | 
 |  | 
 | test_expect_success '@{-2} works' ' | 
 | 	test_rev_equivalent master @{-2} | 
 | ' | 
 |  | 
 | test_expect_success '@{-3} fails' ' | 
 | 	test_must_fail git rev-parse @{-3} | 
 | ' | 
 |  | 
 | test_done | 
 |  | 
 |  |