ルートノードの所有権を要求するということです。戻り値として新しいルートノードを所有権付きで返しています。所有権が必要なのはノードの親子関係を弄るからです。するにはそのノードを所有していないといけません。有効にしないとコンパイルが通りません。3行目でコンパイルエラーになります。操作を実装するだけです。左側にある場合と右側にある場合の2通り書かないといけないので、左側にある場合のみを示します。根とする部分木に対してスプレー操作を実行し、新たな根を返す。持つノードが部分木に存在する場合、それが新たな根となる。部分木に存在しない場合、最後にアクセスしたノードが根となる。部分木は破壊的に変更される。左側にあるときのスプレー操作を行う。長くなってきたので、ここでは省略します。全体のソースコードを上げているので、そっちを参照してください。いうインターフェイスがあるとします。2つのテストを個別に書かないといけないように思います。インターフェイスのみを使ってテストを書けば1回テストを書くだけで2つの具象クラス両方をテストできます。以下のようなインターフェイスだったとします。持つユーザーを取得する。名前とパスワードを指定して新しくユーザーを作成する。対してテストを書きます。}}これでテストケースの定義が書けました。このクラスを継承してテストの実体を作ります。InMemoryUserRepository()}たった3行でした。コードが増えています。使ってデータベースの初期化を行っています。定義した3つのテストケースが実行されます。2つの具象クラスに対するテストを共通化できたというわけです。以上、テストクラスを継承することでインターフェイスのテストを行う例でした。