(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: 
            (condition.Shell
              commands: [
                (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: <Id.Left_Backtick '`'>
                        child: (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
                  op: <Id.Redir_Great '>'>
                  loc: (redir_loc.Fd fd:1)
                  arg: {($ Id.VSub_DollarName '$outfile')}
                )
              ]
              do_fork: T
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:numtestcases)
                  op: assign_op.Equal
                  rhs: 
                    {
                      (command_sub
                        left_token: <Id.Left_DollarParen '$('>
                        child: 
                          (C {<expr>} {($ Id.VSub_DollarName '$numtestcases')} {<Id.Lit_Other '+'>} 
                            {
                              (command_sub
                                left_token: <Id.Left_DollarParen '$('>
                                child: 
                                  (command.Pipeline
                                    children: [
                                      (C {<cat>} {($ Id.VSub_DollarName '$expfile')})
                                      (C {<wc>} {<-l>})
                                    ]
                                    negated: F
                                  )
                              )
                            }
                          )
                      )
                    }
                  spids: [124]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (C {<grep>} {<-q>} 
                          {
                            (DQ <SKIP> <Id.Lit_BadBackslash '\\'> 
                              <'|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: <Id.Left_DollarParen '$('>
                                child: 
                                  (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
                      op: <Id.Redir_Great '>'>
                      loc: (redir_loc.Fd fd:1)
                      arg: {<'/dev/null'>}
                    )
                  ]
                  do_fork: T
                )
                (command.If
                  arms: [
                    (if_arm
                      cond: 
                        (condition.Shell
                          commands: [
                            (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: <Id.Left_DollarParen '$('>
                                    child: 
                                      (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: <Id.Left_DollarParen '$('>
                                child: 
                                  (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: <Id.Left_DollarParen '$('>
                        child: 
                          (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: 
            (condition.Shell
              commands: [
                (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: 
            (condition.Shell
              commands: [
                (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:<Id.ControlFlow_Exit exit> arg_word:{<1>})
          ]
          spids: [358 371]
        )
      ]
      else_action: [(command.ControlFlow token:<Id.ControlFlow_Exit exit> arg_word:{<0>})]
    )
  ]
)