Writing a general purpose "split" function (for SICP's imaginary language)
In order to test it, you need to have definitions for things like beside and below. There's something strange in the text book code because the painter "smaller" is not actually scaled in the code, or is it indicated that "below" and "beside" scale their arguments? Anyway, you can just define

  (define (below a b) `(below ,a, b))
  (define (beside a b) `(beside ,a ,b))


so e.g. (right-split 'apple 1) should produce as result

  '(beside apple (below apple apple))


You can verify from the structure of the terms that your code works correctly.

Your (split ...) function has a bug, as "painter" is missing from the line where you call "step2". The code should read

  (step2 painter (step1 smaller smaller))


Otherwise it looks fine to me.