(command.CommandList
  children: [
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:base)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: <Id.Left_Backtick '`'>
                child: (C {<basename>} {($ Id.VSub_Number '$0')})
              )
            }
          spids: [7]
        )
      ]
    )
    (C {<echo>} {(DQ <1..3>)})
    (command.ShFunction
      name: assert_equals
      body: 
        (BraceGroup
          children: [
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:testnum)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number '$1'))}
                  spids: [31]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:expected)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number '$2'))}
                  spids: [37]
                )
              ]
            )
            (command.ShAssignment
              pairs: [
                (assign_pair
                  lhs: (sh_lhs_expr.Name name:fn)
                  op: assign_op.Equal
                  rhs: {(DQ ($ Id.VSub_Number '$3'))}
                  spids: [43]
                )
              ]
            )
            (command.If
              arms: [
                (if_arm
                  cond: 
                    (condition.Shell
                      commands: [
                        (C {<Id.Lit_LBracket '['>} {(DQ ($ Id.VSub_DollarName '$expected'))} 
                          {<Id.Lit_Equals '='>} {(DQ (command_sub left_token:<Id.Left_DollarParen '$('> child:(C {($ Id.VSub_DollarName '$fn')})))} 
                          {<Id.Lit_RBracket ']'>}
                        )
                      ]
                    )
                  action: [
                    (C {<echo>} 
                      {
                        (DQ <'ok '> ($ Id.VSub_DollarName '$testnum') <' - '> 
                          ($ Id.VSub_DollarName '$fn')
                        )
                      }
                    )
                  ]
                  spids: [49 68]
                )
              ]
              else_action: [
                (C {<echo>} 
                  {
                    (DQ <'not ok '> ($ Id.VSub_DollarName '$testnum') <' - '> 
                      ($ Id.VSub_DollarName '$fn')
                    )
                  }
                )
              ]
            )
          ]
        )
    )
    (C {<assert_equals>} {<1>} {<1>} {(DQ <'units -t ft ft'>)})
    (C {<assert_equals>} {<2>} {<12>} {(DQ <'units -t ft in'>)})
    (C {<assert_equals>} {<3>} {<0.083333333>} {(DQ <'units -t in ft'>)})
  ]
)