|  | 
|  | 1 | +require "test_helper" | 
|  | 2 | + | 
|  | 3 | +class OrderedSetTest < ActiveSupport::TestCase | 
|  | 4 | +  setup { @set = Kredis.ordered_set "ordered-set", limit: 5 } | 
|  | 5 | + | 
|  | 6 | +  test "append" do | 
|  | 7 | +    @set.append(%w[ 1 2 3 ]) | 
|  | 8 | +    @set.append(%w[ 1 2 3 4 ]) | 
|  | 9 | +    assert_equal %w[ 1 2 3 4 ], @set.elements | 
|  | 10 | + | 
|  | 11 | +    @set << "5" | 
|  | 12 | +    assert_equal %w[ 1 2 3 4 5 ], @set.elements | 
|  | 13 | +  end | 
|  | 14 | + | 
|  | 15 | +  test "appending the same element re-appends it" do | 
|  | 16 | +    @set.append(%w[ 1 2 3 ]) | 
|  | 17 | +    @set.append(%w[ 2 ]) | 
|  | 18 | +    assert_equal %w[ 1 3 2 ], @set.elements | 
|  | 19 | +  end | 
|  | 20 | + | 
|  | 21 | +  test "mass append maintains ordering" do | 
|  | 22 | +    @set = Kredis.ordered_set "ordered-set" # no limit | 
|  | 23 | + | 
|  | 24 | +    thousand_elements = 1000.times.map { [*"A".."Z"].sample(10).join } | 
|  | 25 | +    @set.append(thousand_elements) | 
|  | 26 | +    assert_equal thousand_elements, @set.elements | 
|  | 27 | + | 
|  | 28 | +    thousand_elements.each { |element| @set.append(element) } | 
|  | 29 | +    assert_equal thousand_elements, @set.elements | 
|  | 30 | +  end | 
|  | 31 | + | 
|  | 32 | +  test "prepend" do | 
|  | 33 | +    @set.prepend(%w[ 1 2 3 ]) | 
|  | 34 | +    @set.prepend(%w[ 1 2 3 4 ]) | 
|  | 35 | +    assert_equal %w[ 4 3 2 1 ], @set.elements | 
|  | 36 | +  end | 
|  | 37 | + | 
|  | 38 | +  test "append nothing" do | 
|  | 39 | +    @set.append(%w[ 1 2 3 ]) | 
|  | 40 | +    @set.append([]) | 
|  | 41 | +    assert_equal %w[ 1 2 3 ], @set.elements | 
|  | 42 | +  end | 
|  | 43 | + | 
|  | 44 | +  test "prepend nothing" do | 
|  | 45 | +    @set.prepend(%w[ 1 2 3 ]) | 
|  | 46 | +    @set.prepend([]) | 
|  | 47 | +    assert_equal %w[ 3 2 1 ], @set.elements | 
|  | 48 | +  end | 
|  | 49 | + | 
|  | 50 | +  test "typed as integers" do | 
|  | 51 | +    @set = Kredis.ordered_set "mylist", typed: :integer | 
|  | 52 | + | 
|  | 53 | +    @set.append [ 1, 2 ] | 
|  | 54 | +    @set << 2 | 
|  | 55 | +    assert_equal [ 1, 2 ], @set.elements | 
|  | 56 | + | 
|  | 57 | +    @set.remove(2) | 
|  | 58 | +    assert_equal [ 1 ], @set.elements | 
|  | 59 | + | 
|  | 60 | +    @set.append [ "1-a", 2 ] | 
|  | 61 | + | 
|  | 62 | +    assert_equal [ 1, 2 ], @set.elements | 
|  | 63 | +  end | 
|  | 64 | + | 
|  | 65 | +  test "exists?" do | 
|  | 66 | +    assert_not @set.exists? | 
|  | 67 | + | 
|  | 68 | +    @set.append [ 1, 2 ] | 
|  | 69 | +    assert @set.exists? | 
|  | 70 | +  end | 
|  | 71 | + | 
|  | 72 | +  test "appending over limit" do | 
|  | 73 | +    @set.append(%w[ 1 2 3 4 5 ]) | 
|  | 74 | +    @set.append(%w[ 6 7 8 ]) | 
|  | 75 | +    assert_equal %w[ 4 5 6 7 8 ], @set.elements | 
|  | 76 | +  end | 
|  | 77 | + | 
|  | 78 | +  test "prepending over limit" do | 
|  | 79 | +    @set.prepend(%w[ 1 2 3 4 5 ]) | 
|  | 80 | +    @set.prepend(%w[ 6 7 8 ]) | 
|  | 81 | +    assert_equal %w[ 8 7 6 5 4 ], @set.elements | 
|  | 82 | +  end | 
|  | 83 | + | 
|  | 84 | +  test "appending array with duplicates" do | 
|  | 85 | +    @set.append(%w[ 1 1 1 ]) | 
|  | 86 | +    assert_equal %w[ 1 ], @set.elements | 
|  | 87 | +  end | 
|  | 88 | + | 
|  | 89 | +  test "prepending array with duplicates" do | 
|  | 90 | +    @set.prepend(%w[ 1 1 1 ]) | 
|  | 91 | +    assert_equal %w[ 1 ], @set.elements | 
|  | 92 | +  end | 
|  | 93 | + | 
|  | 94 | +  test "limit can't be 0 or less" do | 
|  | 95 | +    assert_raises do | 
|  | 96 | +      Kredis.ordered_set "ordered-set", limit: -1 | 
|  | 97 | +    end | 
|  | 98 | +  end | 
|  | 99 | +end | 
0 commit comments