require './hashmap.rb' RSpec.describe HashMap do subject(:map) { HashMap.new } context 'when empty' do it { is_expected.to be_empty } describe '#count' do subject { map.count } it { is_expected.to eq 0 } end describe '#[]' do subject { map["fruit"] } it { is_expected.to eq nil } end describe '#[]=' do it 'updates the count' do expect { map["fruit"] = %w(apples oranges bananas) }.to change { map.count }.by 1 end end describe '#keys' do subject { map.keys } it { is_expected.to be_empty } end end context 'with some content' do subject(:map) do HashMap.new.tap do |map| map["fruit"] = %w(apples oranges bananas) map["vegetables"] = %w(potatoes carrots) map["meats"] = %w(beef pork chicken lamb) end end it { is_expected.not_to be_empty } describe '#count' do subject { map.count } it { is_expected.to eq 3 } end describe '#[]' do subject { map["fruit"] } it { is_expected.to eq %w(apples oranges bananas) } end describe '#keys' do subject { map.keys } it { is_expected.to eq %w(fruit meats vegetables) } end context 're-setting a key' do it 'does not change the count' do expect { map["fruit"] = %w(pineapples) } .not_to change { map.count } end end describe '#delete' do %w(fruit vegetables meats).each do |key| it "deletes #{key}" do expect { map.delete(key) }.to change { map.count }.by -1 end end end end end