File: test_array_utils.rb

package info (click to toggle)
ruby-ffaker 2.23.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 3,776 kB
  • sloc: ruby: 12,788; makefile: 8; sh: 1
file content (100 lines) | stat: -rw-r--r-- 2,380 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# frozen_string_literal: true

require_relative 'helper'
require 'set'

class TestArrayUtils < Test::Unit::TestCase
  include DeterministicHelper

  def setup
    @array = FFaker::ArrayUtils.const_array('a'..'c')
    @elems = Set.new('a'..'c')
  end

  def test_provides_a_way_of_freezing_the_elements_and_itself
    assert @array.respond_to?(:freeze_all)
    @array.freeze_all
    assert @array.frozen?
    @array.each { |e| assert e.frozen? }
  end

  def test_provides_a_way_of_getting_a_random_element
    set = Set.new
    1000.times { set << @array.sample }
    assert set == @elems
  end

  def test_provides_a_way_of_getting_n_random_elements
    assert_equal @array.sample(3).sort, @array.sort

    1.upto(3) do |n|
      1000.times do
        new_arr = @array.sample(n)
        assert_equal n, new_arr.length
        new_arr.each do |e|
          assert @elems.include? e
        end
      end
    end
  end

  def test_provides_a_way_of_shuffling_the_array
    assert_equal @array.shuffle.sort, @array.sort

    different_arrangements = 0

    1000.times do
      new_arr = @array.shuffle
      assert new_arr.to_set == @elems
      different_arrangements += 1 if new_arr != @array
    end

    assert different_arrangements.positive?
  end

  def test_self_random_pick_is_deterministic
    supress_warn_output do
      array = Array.new(10) { rand(0..9) }
      assert_deterministic { FFaker::ArrayUtils.random_pick(array, 3) }
    end
  end

  def test_self_rand_is_deterministic
    supress_warn_output do
      array = Array.new(10) { rand(0..9) }
      assert_deterministic { FFaker::ArrayUtils.rand(array) }
    end
  end

  def test_self_shuffle_is_deterministic
    array = Array.new(10) { rand(0..9) }
    assert_deterministic { FFaker::ArrayUtils.shuffle(array) }
  end

  def test_rand_is_deterministic
    supress_warn_output do
      assert_deterministic { @array.rand }
    end
  end

  def test_random_pick_is_deterministic
    supress_warn_output do
      assert_deterministic { @array.random_pick(2) }
    end
  end

  def test_shuffle_is_deterministic
    assert_deterministic { @array.shuffle }
  end

  private

  # Supress the deprecation warning that some methods output, so we get less
  # noise in our test run.
  def supress_warn_output
    original_verbosity = $VERBOSE
    $VERBOSE = nil
    yield
    $VERBOSE = original_verbosity
  end
end