(command.CommandList
  children: [
    (command.Pipeline
      children: [
        (command.Simple
          words: [
            {(dd)}
            {(Id.Lit_VarLike 'if=') (/dev/zero)}
            {(Id.Lit_VarLike 'bs=') (1048576)}
            {(Id.Lit_VarLike 'count=') (100)}
          ]
          redirects: [
            (redir.Redir
              op: (Token id:Id.Redir_Great val:'2>' span_id:15)
              fd: 2
              arg_word: {(/dev/null)}
            )
          ]
        )
        (command.Simple
          words: [{(/usr/bin/time)} {(t/helper/test-sha1)}]
          redirects: [
            (redir.Redir
              op: (Token id:Id.Redir_Great val:'>' span_id:24)
              fd: -1
              arg_word: {(/dev/null)}
            )
          ]
        )
      ]
      negated: F
    )
    (command.WhileUntil
      keyword: (Token id:Id.KW_While val:while span_id:28)
      cond: [(C {(read)} {(expect)} {(cnt)} {(pfx)})]
      body: 
        (command.DoGroup
          children: [
            (command.Case
              to_match: {(DQ ($ Id.VSub_DollarName '$expect'))}
              arms: [
                (case_arm
                  pat_list: [{(SQ (Token id:Id.Lit_Chars val:'#' span_id:50)) (Id.Lit_Star '*')}]
                  action: [
                    (command.ControlFlow
                      token: (Token id:Id.ControlFlow_Continue val:continue span_id:55)
                    )
                  ]
                  spids: [49 53 57 -1]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:actual)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:63)
                        command_list: 
                          (command.CommandList
                            children: [
                              (command.Pipeline
                                children: [
                                  (command.BraceGroup
                                    children: [
                                      (command.AndOr
                                        ops: [Id.Op_DPipe]
                                        children: [
                                          (C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$pfx'))})
                                          (C {(echo)} {(DQ ($ Id.VSub_DollarName '$pfx'))})
                                        ]
                                      )
                                      (command.Pipeline
                                        children: [
                                          (command.Simple
                                            words: [
                                              {(dd)}
                                              {(Id.Lit_VarLike 'if=') (/dev/zero)}
                                              {(Id.Lit_VarLike 'bs=') (1048576)}
                                              {(Id.Lit_VarLike 'count=') 
                                                ($ Id.VSub_DollarName '$cnt')
                                              }
                                            ]
                                            redirects: [
                                              (redir.Redir
                                                op: (Token id:Id.Redir_Great val:'2>' span_id:97)
                                                fd: 2
                                                arg_word: {(/dev/null)}
                                              )
                                            ]
                                          )
                                          (C {(perl)} {(-pe)} 
                                            {
                                              (SQ 
                                                (Token
                                                  id: Id.Lit_Chars
                                                  val: 'y/\\000/g/'
                                                  span_id: 108
                                                )
                                              )
                                            }
                                          )
                                        ]
                                        negated: F
                                      )
                                    ]
                                  )
                                  (C {(./t/helper/test-sha1)} {($ Id.VSub_DollarName '$cnt')})
                                ]
                                negated: F
                              )
                            ]
                          )
                      )
                    }
                  spids: [62]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (C {(test)} {(DQ ($ Id.VSub_DollarName '$expect'))} {(Id.Lit_Equals '=')} 
                      {(DQ ($ Id.VSub_DollarName '$actual'))}
                    )
                  ]
                  action: [
                    (C {(echo)} 
                      {
                        (DQ ('OK: ') ($ Id.VSub_DollarName '$expect') (' ') 
                          ($ Id.VSub_DollarName '$cnt') (' ') ($ Id.VSub_DollarName '$pfx')
                        )
                      }
                    )
                  ]
                  spids: [124 139]
                )
              ]
              else_action: [
                (command.Simple
                  words: [{(echo)} {(DQ ('OOPS: ') ($ Id.VSub_DollarName '$cnt'))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:159)
                      fd: -1
                      arg_word: {(2)}
                    )
                  ]
                )
                (command.Simple
                  words: [{(echo)} {(DQ ('expect: ') ($ Id.VSub_DollarName '$expect'))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:170)
                      fd: -1
                      arg_word: {(2)}
                    )
                  ]
                )
                (command.Simple
                  words: [{(echo)} {(DQ ('actual: ') ($ Id.VSub_DollarName '$actual'))}]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:181)
                      fd: -1
                      arg_word: {(2)}
                    )
                  ]
                )
                (command.ControlFlow
                  token: (Token id:Id.ControlFlow_Exit val:exit span_id:190)
                  arg_word: {(1)}
                )
              ]
            )
          ]
        )
      redirects: [
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:199)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 222
          stdin_parts: [
            ('da39a3ee5e6b4b0d3255bfef95601890afd80709 0\n')
            ('3f786850e387550fdab836ed7e6dc881de23001b 0 a\n')
            ('5277cbb45a15902137d332d97e89cf8136545485 0 ab\n')
            ('03cfd743661f07975fa2f1220c5194cbaff48451 0 abc\n')
            ('3330b4373640f9e4604991e73c7e86bfd8da2dc3 0 abcd\n')
            ('ec11312386ad561674f724b8cca7cf1796e26d1d 0 abcde\n')
            ('bdc37c074ec4ee6050d68bc133c6b912f36474df 0 abcdef\n')
            ('69bca99b923859f2dc486b55b87f49689b7358c7 0 abcdefg\n')
            ('e414af7161c9554089f4106d6f1797ef14a73666 0 abcdefgh\n')
            ('0707f2970043f9f7c22029482db27733deaec029 0 abcdefghi\n')
            ('a4dd8aa74a5636728fe52451636e2e17726033aa 1\n')
            ('9986b45e2f4d7086372533bb6953a8652fa3644a 1 frotz\n')
            ('23d8d4f788e8526b4877548a32577543cbaaf51f 10\n')
            ('8cd23f822ab44c7f481b8c92d591f6d1fcad431c 10 frotz\n')
            ('f3b5604a4e604899c1233edb3bf1cc0ede4d8c32 512\n')
            ('b095bd837a371593048136e429e9ac4b476e1bb3 512 frotz\n')
            ('08fa81d6190948de5ccca3966340cc48c10cceac 1200 xyzzy\n')
            ('e33a291f42c30a159733dd98b8b3e4ff34158ca0 4090 4G\n')
            ('#a3bf783bc20caa958f6cb24dd140a7b21984838d 9999 nitfol\n')
          ]
        )
      ]
    )
    (command.ControlFlow token:(Token id:Id.ControlFlow_Exit val:exit span_id:224))
    (command.WhileUntil
      keyword: (Token id:Id.KW_While val:while span_id:234)
      cond: [(C {(read)} {(cnt)} {(pfx)})]
      body: 
        (command.DoGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:actual)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:246)
                        command_list: 
                          (command.CommandList
                            children: [
                              (command.Pipeline
                                children: [
                                  (command.BraceGroup
                                    children: [
                                      (command.AndOr
                                        ops: [Id.Op_DPipe]
                                        children: [
                                          (C {(test)} {(-z)} {(DQ ($ Id.VSub_DollarName '$pfx'))})
                                          (C {(echo)} {(DQ ($ Id.VSub_DollarName '$pfx'))})
                                        ]
                                      )
                                      (command.Pipeline
                                        children: [
                                          (command.Simple
                                            words: [
                                              {(dd)}
                                              {(Id.Lit_VarLike 'if=') (/dev/zero)}
                                              {(Id.Lit_VarLike 'bs=') (1048576)}
                                              {(Id.Lit_VarLike 'count=') 
                                                ($ Id.VSub_DollarName '$cnt')
                                              }
                                            ]
                                            redirects: [
                                              (redir.Redir
                                                op: (Token id:Id.Redir_Great val:'2>' span_id:280)
                                                fd: 2
                                                arg_word: {(/dev/null)}
                                              )
                                            ]
                                          )
                                          (C {(perl)} {(-pe)} 
                                            {
                                              (SQ 
                                                (Token
                                                  id: Id.Lit_Chars
                                                  val: 'y/\\000/g/'
                                                  span_id: 291
                                                )
                                              )
                                            }
                                          )
                                        ]
                                        negated: F
                                      )
                                    ]
                                  )
                                  (C {(sha1sum)})
                                  (C {(sed)} {(-e)} 
                                    {(SQ (Token id:Id.Lit_Chars val:'s/ .*//' span_id:309))}
                                  )
                                ]
                                negated: F
                              )
                            ]
                          )
                      )
                    }
                  spids: [245]
                )
              ]
            )
            (C {(echo)} 
              {
                (DQ ($ Id.VSub_DollarName '$actual') (' ') ($ Id.VSub_DollarName '$cnt') (' ') 
                  ($ Id.VSub_DollarName '$pfx')
                )
              }
            )
          ]
        )
      redirects: [
        (redir.HereDoc
          op: (Token id:Id.Redir_DLess val:'<<' span_id:328)
          fd: -1
          here_begin: {(EOF)}
          here_end_span_id: 351
          stdin_parts: [
            ('0\n')
            ('0 a\n')
            ('0 ab\n')
            ('0 abc\n')
            ('0 abcd\n')
            ('0 abcde\n')
            ('0 abcdef\n')
            ('0 abcdefg\n')
            ('0 abcdefgh\n')
            ('0 abcdefghi\n')
            ('1\n')
            ('1 frotz\n')
            ('10\n')
            ('10 frotz\n')
            ('512\n')
            ('512 frotz\n')
            ('1200 xyzzy\n')
            ('4090 4G\n')
            ('9999 nitfol\n')
          ]
        )
      ]
    )
  ]
)