(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: {(SQ <'common tail optimization'>)} spids: [4] ) ] ) (C {<.>} {<./test-lib.sh>}) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:z) op: assign_op.Equal rhs: {<zzzzzzzz>} spids: [15] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:z) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$z') ($ Id.VSub_DollarName '$z') ($ Id.VSub_DollarName '$z') ($ Id.VSub_DollarName '$z') ($ Id.VSub_DollarName '$z') ($ Id.VSub_DollarName '$z') ($ Id.VSub_DollarName '$z') ($ Id.VSub_DollarName '$z') ) } spids: [22] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:z) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$z') ($ Id.VSub_DollarName '$z') ($ Id.VSub_DollarName '$z') ($ Id.VSub_DollarName '$z') ($ Id.VSub_DollarName '$z') ($ Id.VSub_DollarName '$z') ($ Id.VSub_DollarName '$z') ($ Id.VSub_DollarName '$z') ) } spids: [38] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:z) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$z') ($ Id.VSub_DollarName '$z') ($ Id.VSub_DollarName '$z') ($ Id.VSub_DollarName '$z') ) } spids: [54] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:z2047) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_DollarParen '$('> command_list: (command.CommandList children: [ (C {<expr>} {(DQ ($ Id.VSub_DollarName '$z'))} {<Id.Lit_Other ':'>} {(SQ <'.\\(.*\\)'>)} ) ] ) ) } spids: [66] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:x) op: assign_op.Equal rhs: {<zzzzzzzzzz>} spids: [87] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:y) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$x') ($ Id.VSub_DollarName '$x') ($ Id.VSub_DollarName '$x') ($ Id.VSub_DollarName '$x') ($ Id.VSub_DollarName '$x') ($ Id.VSub_DollarName '$x') ($ Id.VSub_DollarName '$x') ($ Id.VSub_DollarName '$x') ($ Id.VSub_DollarName '$x') ($ Id.VSub_DollarName '$x') ) } spids: [94] ) ] ) terminator: <Id.Op_Semi _> ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:z) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$y') ($ Id.VSub_DollarName '$y') ($ Id.VSub_DollarName '$y') ($ Id.VSub_DollarName '$y') ($ Id.VSub_DollarName '$y') ($ Id.VSub_DollarName '$y') ($ Id.VSub_DollarName '$y') ($ Id.VSub_DollarName '$y') ($ Id.VSub_DollarName '$y') ($ Id.VSub_DollarName '$y') ) } spids: [112] ) ] ) terminator: <Id.Op_Semi _> ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:z1000) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$z')} spids: [130] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:z100) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$y')} spids: [133] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:z10) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$x')} spids: [136] ) ] ) (command.ShFunction name: zs body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:count) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [147] ) ] ) (command.WhileUntil keyword: <Id.KW_While while> cond: [(C {<test>} {(DQ ($ Id.VSub_DollarName '$count'))} {<-ge>} {<1000>})] body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:count) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Minus left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$count')}) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 1000>}) ) ) } spids: [169] ) ] ) (C {<printf>} {(DQ <'%s'>)} {($ Id.VSub_DollarName '$z1000')}) ] ) ) (command.WhileUntil keyword: <Id.KW_While while> cond: [(C {<test>} {(DQ ($ Id.VSub_DollarName '$count'))} {<-ge>} {<100>})] body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:count) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Minus left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$count')}) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 100>}) ) ) } spids: [208] ) ] ) (C {<printf>} {(DQ <'%s'>)} {($ Id.VSub_DollarName '$z100')}) ] ) ) (command.WhileUntil keyword: <Id.KW_While while> cond: [(C {<test>} {(DQ ($ Id.VSub_DollarName '$count'))} {<-ge>} {<10>})] body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:count) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Minus left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$count')}) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 10>}) ) ) } spids: [247] ) ] ) (C {<printf>} {(DQ <'%s'>)} {($ Id.VSub_DollarName '$z10')}) ] ) ) (command.WhileUntil keyword: <Id.KW_While while> cond: [(C {<test>} {(DQ ($ Id.VSub_DollarName '$count'))} {<-ge>} {<1>})] body: (command.DoGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:count) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Minus left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$count')}) right: (arith_expr.ArithWord w:{<Id.Lit_Digits 1>}) ) ) } spids: [286] ) ] ) (C {<printf>} {(DQ <z>)}) ] ) ) ] ) ) (command.ShFunction name: zc body: (command.BraceGroup children: [ (command.Sentence child: (C {<sed>} {<-e>} {(DQ <'/^index/d'>)} {<-e>} {(DQ <s/> ($ Id.VSub_DollarName '$z1000') </Q/g>)} {<-e>} {(DQ <s/QQQQQQQQQ/Z9000/g>)} {<-e>} {(DQ <s/QQQQQQQQ/Z8000/g>)} {<-e>} {(DQ <s/QQQQQQQ/Z7000/g>)} {<-e>} {(DQ <s/QQQQQQ/Z6000/g>)} {<-e>} {(DQ <s/QQQQQ/Z5000/g>)} {<-e>} {(DQ <s/QQQQ/Z4000/g>)} {<-e>} {(DQ <s/QQQ/Z3000/g>)} {<-e>} {(DQ <s/QQ/Z2000/g>)} {<-e>} {(DQ <s/Q/Z1000/g>)} {<-e>} {(DQ <s/> ($ Id.VSub_DollarName '$z100') </Q/g>)} {<-e>} {(DQ <s/QQQQQQQQQ/Z900/g>)} {<-e>} {(DQ <s/QQQQQQQQ/Z800/g>)} {<-e>} {(DQ <s/QQQQQQQ/Z700/g>)} {<-e>} {(DQ <s/QQQQQQ/Z600/g>)} {<-e>} {(DQ <s/QQQQQ/Z500/g>)} {<-e>} {(DQ <s/QQQQ/Z400/g>)} {<-e>} {(DQ <s/QQQ/Z300/g>)} {<-e>} {(DQ <s/QQ/Z200/g>)} {<-e>} {(DQ <s/Q/Z100/g>)} {<-e>} {(DQ <s/000Z//g>)} {<-e>} {(DQ <s/> ($ Id.VSub_DollarName '$z10') </Q/g>)} {<-e>} {(DQ <s/QQQQQQQQQ/Z90/g>)} {<-e>} {(DQ <s/QQQQQQQQ/Z80/g>)} {<-e>} {(DQ <s/QQQQQQQ/Z70/g>)} {<-e>} {(DQ <s/QQQQQQ/Z60/g>)} {<-e>} {(DQ <s/QQQQQ/Z50/g>)} {<-e>} {(DQ <s/QQQQ/Z40/g>)} {<-e>} {(DQ <s/QQQ/Z30/g>)} {<-e>} {(DQ <s/QQ/Z20/g>)} {<-e>} {(DQ <s/Q/Z10/g>)} {<-e>} {(DQ <s/00Z//g>)} {<-e>} {(DQ <s/z/Q/g>)} {<-e>} {(DQ <s/QQQQQQQQQ/Z9/g>)} {<-e>} {(DQ <s/QQQQQQQQ/Z8/g>)} {<-e>} {(DQ <s/QQQQQQQ/Z7/g>)} {<-e>} {(DQ <s/QQQQQQ/Z6/g>)} {<-e>} {(DQ <s/QQQQQ/Z5/g>)} {<-e>} {(DQ <s/QQQQ/Z4/g>)} {<-e>} {(DQ <s/QQQ/Z3/g>)} {<-e>} {(DQ <s/QQ/Z2/g>)} {<-e>} {(DQ <s/Q/Z1/g>)} {<-e>} {(DQ <s/0Z//g>)} ) terminator: <Id.Op_Semi _> ) ] ) ) (command.ShFunction name: expect_pattern body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:cnt) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_Number '$1'))} spids: [690] ) ] ) (command.Simple words: [{<cat>}] redirects: [ (redir.HereDoc op: <Id.Redir_DLess '<<'> fd: -1 here_begin: {<EOF>} here_end_span_id: 774 stdin_parts: [ <'diff --git a/file-a'> ($ Id.VSub_DollarName '$cnt') <' b/file-a'> ($ Id.VSub_DollarName '$cnt') <'\n'> <'--- a/file-a'> ($ Id.VSub_DollarName '$cnt') <'\n'> <'+++ b/file-a'> ($ Id.VSub_DollarName '$cnt') <'\n'> <'@@ -1 +1 @@\n'> <-Z> (${ Id.VSub_Name cnt) <'a\n'> <'+Z'> (${ Id.VSub_Name cnt) <'A\n'> <'diff --git a/file-b'> ($ Id.VSub_DollarName '$cnt') <' b/file-b'> ($ Id.VSub_DollarName '$cnt') <'\n'> <'--- a/file-b'> ($ Id.VSub_DollarName '$cnt') <'\n'> <'+++ b/file-b'> ($ Id.VSub_DollarName '$cnt') <'\n'> <'@@ -1 +1 @@\n'> <'-b\n'> <'+B\n'> <'diff --git a/file-c'> ($ Id.VSub_DollarName '$cnt') <' b/file-c'> ($ Id.VSub_DollarName '$cnt') <'\n'> <'--- a/file-c'> ($ Id.VSub_DollarName '$cnt') <'\n'> <'+++ b/file-c'> ($ Id.VSub_DollarName '$cnt') <'\n'> <'@@ -1 +1 @@\n'> <-cZ> ($ Id.VSub_DollarName '$cnt') <'\n'> <Id.Lit_Other '\\'> <' No newline at end of file\n'> <'+CZ'> ($ Id.VSub_DollarName '$cnt') <'\n'> <Id.Lit_Other '\\'> <' No newline at end of file\n'> <'diff --git a/file-d'> ($ Id.VSub_DollarName '$cnt') <' b/file-d'> ($ Id.VSub_DollarName '$cnt') <'\n'> <'--- a/file-d'> ($ Id.VSub_DollarName '$cnt') <'\n'> <'+++ b/file-d'> ($ Id.VSub_DollarName '$cnt') <'\n'> <'@@ -1 +1 @@\n'> <'-d\n'> <'+D\n'> ] ) ] ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:sample) op: assign_op.Equal rhs: {(SQ <'1023 1024 1025 2047 4095'>)} spids: [778] ) ] ) (C {<test_expect_success>} {<setup>} { (SQ <'\n'> <'\n'> <'\tfor n in $sample\n'> <'\tdo\n'> <'\t\t( zs $n ; echo a ) >file-a$n &&\n'> <'\t\t( echo b; zs $n; echo ) >file-b$n &&\n'> <'\t\t( printf c; zs $n ) >file-c$n &&\n'> <'\t\t( echo d; zs $n ) >file-d$n &&\n'> <'\n'> <'\t\tgit add file-a$n file-b$n file-c$n file-d$n &&\n'> <'\n'> <'\t\t( zs $n ; echo A ) >file-a$n &&\n'> <'\t\t( echo B; zs $n; echo ) >file-b$n &&\n'> <'\t\t( printf C; zs $n ) >file-c$n &&\n'> <'\t\t( echo D; zs $n ) >file-d$n &&\n'> <'\n'> <'\t\texpect_pattern $n || return 1\n'> <'\n'> <'\tdone >expect\n'> ) } ) (C {<test_expect_success>} {(SQ <'diff -U0'>)} { (SQ <'\n'> <'\n'> <'\tfor n in $sample\n'> <'\tdo\n'> <'\t\tgit diff -U0 file-?$n\n'> <'\tdone | zc >actual &&\n'> <'\ttest_cmp expect actual\n'> <'\n'> ) } ) (C {<test_done>}) ] )