(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:RM)
          op: assign_op.Equal
          rhs: {(DQ ('rm -f'))}
          spids: [19]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:MP_PY)
          op: assign_op.Equal
          rhs: {(micropython)}
          spids: [24]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:numtests)
          op: assign_op.Equal
          rhs: {(0)}
          spids: [28]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:numtestcases)
          op: assign_op.Equal
          rhs: {(0)}
          spids: [31]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:numpassed)
          op: assign_op.Equal
          rhs: {(0)}
          spids: [34]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:numskipped)
          op: assign_op.Equal
          rhs: {(0)}
          spids: [37]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:numfailed)
          op: assign_op.Equal
          rhs: {(0)}
          spids: [40]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:nameskipped)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [43]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:namefailed)
          op: assign_op.Equal
          rhs: (word.Empty)
          spids: [45]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (C {(Id.Lit_LBracket '[')} {($ Id.VSub_Pound '$#')} {(-eq)} {(0)} {(Id.Lit_RBracket ']')})
          ]
          action: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:tests)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (DQ 
                        (
'basics/*.py micropython/*.py float/*.py import/*.py io/*.py misc/*.py unicode/*.py extmod/*.py unix/*.py'
                        )
                      )
                    }
                  spids: [63]
                )
              ]
            )
          ]
          spids: [48 60]
        )
      ]
      else_action: [
        (command.ShAssignment
          pairs: [
            (assign_pair
              lhs: (sh_lhs_expr.Name name:tests)
              op: assign_op.Equal
              rhs: {(DQ ($ Id.VSub_At '$@'))}
              spids: [71]
            )
          ]
        )
      ]
    )
    (command.ForEach
      iter_name: infile
      iter_words: [{($ Id.VSub_DollarName '$tests')}]
      do_arg_iter: F
      body: 
        (command.DoGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:basename)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_Backtick val:'`' span_id:91)
                        command_list: 
                          (command.CommandList
                            children: [(C {(basename)} {($ Id.VSub_DollarName '$infile')} {(.py)})]
                          )
                      )
                    }
                  spids: [90]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:outfile)
                  op: assign_op.Equal
                  rhs: {(${ Id.VSub_Name basename) (.py.out)}
                  spids: [102]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:expfile)
                  op: assign_op.Equal
                  rhs: {($ Id.VSub_DollarName '$infile') (.exp)}
                  spids: [109]
                )
              ]
            )
            (command.Simple
              words: [{($ Id.VSub_DollarName '$MP_PY')} {($ Id.VSub_DollarName '$infile')}]
              redirects: [
                (redir.Redir
                  op: (Token id:Id.Redir_Great val:'>' span_id:119)
                  fd: -1
                  arg_word: {($ Id.VSub_DollarName '$outfile')}
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:numtestcases)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:125)
                        command_list: 
                          (command.CommandList
                            children: [
                              (C {(expr)} {($ Id.VSub_DollarName '$numtestcases')} {(Id.Lit_Other '+')} 
                                {
                                  (command_sub
                                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:132)
                                    command_list: 
                                      (command.CommandList
                                        children: [
                                          (command.Pipeline
                                            children: [
                                              (C {(cat)} {($ Id.VSub_DollarName '$expfile')})
                                              (C {(wc)} {(-l)})
                                            ]
                                            negated: F
                                          )
                                        ]
                                      )
                                  )
                                }
                              )
                            ]
                          )
                      )
                    }
                  spids: [124]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: [
                    (C {(grep)} {(-q)} 
                      {
                        (DQ (SKIP) (Id.Lit_Other '\\') ('|SyntaxError: invalid micropython decorator'))
                      } {($ Id.VSub_DollarName '$outfile')}
                    )
                  ]
                  action: [
                    (C {(echo)} {(DQ ('skip  ') ($ Id.VSub_DollarName '$infile'))})
                    (C {($ Id.VSub_DollarName '$RM')} {($ Id.VSub_DollarName '$outfile')})
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:numskipped)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:187)
                                command_list: 
                                  (command.CommandList
                                    children: [
                                      (C {(expr)} {($ Id.VSub_DollarName '$numskipped')} 
                                        {(Id.Lit_Other '+')} {(1)}
                                      )
                                    ]
                                  )
                              )
                            }
                          spids: [186]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:nameskipped)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ ($ Id.VSub_DollarName '$nameskipped') (' ') 
                                ($ Id.VSub_DollarName '$basename')
                              )
                            }
                          spids: [198]
                        )
                      ]
                    )
                  ]
                  spids: [147 162]
                )
              ]
              else_action: [
                (command.Simple
                  words: [
                    {(diff)}
                    {(--brief)}
                    {($ Id.VSub_DollarName '$expfile')}
                    {($ Id.VSub_DollarName '$outfile')}
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:217)
                      fd: -1
                      arg_word: {(/dev/null)}
                    )
                  ]
                )
                (command.If
                  arms: [
                    (if_arm
                      cond: [
                        (C {(Id.Lit_LBracket '[')} {($ Id.VSub_QMark '$?')} {(-eq)} {(0)} 
                          {(Id.Lit_RBracket ']')}
                        )
                      ]
                      action: [
                        (C {(echo)} {(DQ ('pass  ') ($ Id.VSub_DollarName '$infile'))})
                        (C {($ Id.VSub_DollarName '$RM')} {($ Id.VSub_DollarName '$outfile')})
                        (command.ShAssignment
                          pairs: [
                            (assign_pair
                              lhs: (sh_lhs_expr.Name name:numpassed)
                              op: assign_op.Equal
                              rhs: 
                                {
                                  (command_sub
                                    left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:253)
                                    command_list: 
                                      (command.CommandList
                                        children: [
                                          (C {(expr)} {($ Id.VSub_DollarName '$numpassed')} 
                                            {(Id.Lit_Other '+')} {(1)}
                                          )
                                        ]
                                      )
                                  )
                                }
                              spids: [252]
                            )
                          ]
                        )
                      ]
                      spids: [223 236]
                    )
                  ]
                  else_action: [
                    (C {(echo)} {(DQ ('FAIL  ') ($ Id.VSub_DollarName '$infile'))})
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:numfailed)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (command_sub
                                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:276)
                                command_list: 
                                  (command.CommandList
                                    children: [
                                      (C {(expr)} {($ Id.VSub_DollarName '$numfailed')} 
                                        {(Id.Lit_Other '+')} {(1)}
                                      )
                                    ]
                                  )
                              )
                            }
                          spids: [275]
                        )
                      ]
                    )
                    (command.ShAssignment
                      pairs: [
                        (assign_pair
                          lhs: (sh_lhs_expr.Name name:namefailed)
                          op: assign_op.Equal
                          rhs: 
                            {
                              (DQ ($ Id.VSub_DollarName '$namefailed') (' ') 
                                ($ Id.VSub_DollarName '$basename')
                              )
                            }
                          spids: [287]
                        )
                      ]
                    )
                  ]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:numtests)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:303)
                        command_list: 
                          (command.CommandList
                            children: [
                              (C {(expr)} {($ Id.VSub_DollarName '$numtests')} {(Id.Lit_Other '+')} {(1)})
                            ]
                          )
                      )
                    }
                  spids: [302]
                )
              ]
            )
          ]
        )
    )
    (C {(echo)} 
      {
        (DQ ($ Id.VSub_DollarName '$numtests') (' tests performed (') 
          ($ Id.VSub_DollarName '$numtestcases') (' individual testcases)')
        )
      }
    )
    (C {(echo)} {(DQ ($ Id.VSub_DollarName '$numpassed') (' tests passed'))})
    (command.If
      arms: [
        (if_arm
          cond: [
            (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$numskipped')} 
              {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(0)} {(Id.Lit_RBracket ']')}
            )
          ]
          action: [
            (C {(echo)} 
              {
                (DQ ($ Id.VSub_DollarName '$numskipped') (' tests skipped -') 
                  ($ Id.VSub_DollarName '$nameskipped')
                )
              }
            )
          ]
          spids: [332 345]
        )
      ]
    )
    (command.If
      arms: [
        (if_arm
          cond: [
            (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$numfailed')} 
              {(Id.KW_Bang '!') (Id.Lit_Equals '=')} {(0)} {(Id.Lit_RBracket ']')}
            )
          ]
          action: [
            (C {(echo)} 
              {
                (DQ ($ Id.VSub_DollarName '$numfailed') (' tests failed -') 
                  ($ Id.VSub_DollarName '$namefailed')
                )
              }
            )
            (command.ControlFlow
              token: (Token id:Id.ControlFlow_Exit val:exit span_id:383)
              arg_word: {(1)}
            )
          ]
          spids: [358 371]
        )
      ]
      else_action: [
        (command.ControlFlow
          token: (Token id:Id.ControlFlow_Exit val:exit span_id:390)
          arg_word: {(0)}
        )
      ]
    )
  ]
)