(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'common tail optimization' span_id:6))} 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: (Token id:Id.Op_Semi val:';' span_id:18) ) (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: (Token id:Id.Op_Semi val:';' span_id:34) ) (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: (Token id:Id.Op_Semi val:';' span_id:50) ) (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: (Token id:Id.Op_Semi val:';' span_id:62) ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:z2047) op: assign_op.Equal rhs: { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:67) command_list: (command.CommandList children: [ (C {(expr)} {(DQ ($ Id.VSub_DollarName '$z'))} {(Id.Lit_Other ':')} {(SQ (Token id:Id.Lit_Chars val:'.\\(.*\\)' span_id:77))} ) ] ) ) } spids: [66] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:81) ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:x) op: assign_op.Equal rhs: {(zzzzzzzzzz)} spids: [87] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:90) ) (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: (Token id:Id.Op_Semi val:';' span_id:108) ) (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: (Token id:Id.Op_Semi val:';' span_id:126) ) (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: (Token id:Id.KW_While val:while span_id:153) 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: (Token id:Id.KW_While val:while span_id:192) 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: (Token id:Id.KW_While val:while span_id:231) 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: (Token id:Id.KW_While val:while span_id:270) 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: (Token id:Id.Op_Semi val:';' span_id:677) ) ] ) ) (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: (Token id:Id.Redir_DLess val:'<<' span_id:698) 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 (Token id:Id.Lit_Chars val:'1023 1024 1025 2047 4095' span_id:780))} spids: [778] ) ] ) (C {(test_expect_success)} {(setup)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:789) (Token id:Id.Lit_Chars val:'\n' span_id:790) (Token id:Id.Lit_Chars val:'\tfor n in $sample\n' span_id:791) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:792) (Token id:Id.Lit_Chars val:'\t\t( zs $n ; echo a ) >file-a$n &&\n' span_id:793) (Token id:Id.Lit_Chars val:'\t\t( echo b; zs $n; echo ) >file-b$n &&\n' span_id:794) (Token id:Id.Lit_Chars val:'\t\t( printf c; zs $n ) >file-c$n &&\n' span_id:795) (Token id:Id.Lit_Chars val:'\t\t( echo d; zs $n ) >file-d$n &&\n' span_id:796) (Token id:Id.Lit_Chars val:'\n' span_id:797) (Token id:Id.Lit_Chars val:'\t\tgit add file-a$n file-b$n file-c$n file-d$n &&\n' span_id:798) (Token id:Id.Lit_Chars val:'\n' span_id:799) (Token id:Id.Lit_Chars val:'\t\t( zs $n ; echo A ) >file-a$n &&\n' span_id:800) (Token id: Id.Lit_Chars val: '\t\t( echo B; zs $n; echo ) >file-b$n &&\n' span_id: 801 ) (Token id:Id.Lit_Chars val:'\t\t( printf C; zs $n ) >file-c$n &&\n' span_id:802) (Token id:Id.Lit_Chars val:'\t\t( echo D; zs $n ) >file-d$n &&\n' span_id:803) (Token id:Id.Lit_Chars val:'\n' span_id:804) (Token id:Id.Lit_Chars val:'\t\texpect_pattern $n || return 1\n' span_id:805) (Token id:Id.Lit_Chars val:'\n' span_id:806) (Token id:Id.Lit_Chars val:'\tdone >expect\n' span_id:807) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'diff -U0' span_id:814))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:818) (Token id:Id.Lit_Chars val:'\n' span_id:819) (Token id:Id.Lit_Chars val:'\tfor n in $sample\n' span_id:820) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:821) (Token id:Id.Lit_Chars val:'\t\tgit diff -U0 file-?$n\n' span_id:822) (Token id:Id.Lit_Chars val:'\tdone | zc >actual &&\n' span_id:823) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:824) (Token id:Id.Lit_Chars val:'\n' span_id:825) ) } ) (C {(test_done)}) ] )