queue2,queue3はwithの順番が逆になってます。下の図の実行結果も違います。queue2ではFilteringが最初に効いて、-1が除去されます。その後にIncrementingが効いて、0は1に1は2になってFIFOにストックされます。getの結果は1,2となります。queue3ではIncrementingが最初に効くので、-1は0,0は1,1は2となってストックされます。
この例では上限、下限が無いですね。(-_-;)例えばストックされている以上にgetしたら実行時エラーなんでしょうね。