Sha256: 672b6488c7eb6020c7fd9df52459a20ef636fe873d558cd8fe6e75565feaa219

Contents?: true

Size: 1.51 KB

Versions: 1

Compression:

Stored size: 1.51 KB

Contents

require 'crosscounter/compute'

describe Crosscounter::Compute do
  subject(:computer) { Crosscounter::Compute }

  describe '.compute' do
    it 'counts the number of cross occurring values between all properties' do
      enumerable = [
        Set.new(['age-18', 'gender-male']),
        Set.new(['age-19', 'gender-female']),
        Set.new(['age-18', 'gender-male'])
      ]

      computer.compute(enumerable, 'age-18').should == 2
      computer.compute(enumerable, 'age-18', 'gender-male').should   == 2
      computer.compute(enumerable, 'age-19', 'gender-male').should   == 0
      computer.compute(enumerable, 'age-19', 'gender-female').should == 1
    end
  end

  describe '.compute_all' do
    it 'generates a list of all x properties against all y properties' do
      enumerable = [
        { age: 18, gender: 'male',   tags: %w[happy sad] },
        { age: 19, gender: 'female', tags: %w[happy mad] },
        { age: 18, gender: 'male',   tags: %w[mad sad] },
        { age: 19, gender: 'male',   tags: %w[sad] }
      ]

      computed = computer.compute_all(enumerable,
        { age: [18, 19], gender: %w[male female], tags: %w[happy sad mad] },
        { tags: %w[happy sad mad] }
      )

      computed.should == [
        ['age|18',         2, 1, 2, 1],
        ['age|19',         2, 1, 1, 1],
        ['gender|male',    3, 1, 3, 1],
        ['gender|female',  1, 1, 0, 1],
        ['tags|happy',     2, 2, 1, 1],
        ['tags|sad',       3, 1, 3, 1],
        ['tags|mad',       2, 1, 1, 2]
      ]
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
crosscounter-0.4.0 spec/crosscounter/compute_spec.rb