require 'rails_helper' RSpec.describe 'CustomSet' do let(:set) { CustomSet.new(init_data) } describe '#exist?' do subject { set.exist?(element) } context 'set already have data' do let(:init_data) { [1, 2] } context 'element exists in set' do let(:element) { 1 } it { is_expected.to eq true } end context 'element does not exist in set' do let(:element) { 3 } it { is_expected.to eq false } end end context 'set does not have data' do let(:init_data) { [] } let(:element) { 1 } it { is_expected.to eq false } end end describe '#add' do let(:init_data) { [1, 2] } after do expect(set.exist?(element)).to eq true end context 'added element exists in set' do let(:element) { 1 } it 'does not add to set' do expect { set.add(element) }.not_to change { set.data.length } end end context 'added element does not exists in set' do let(:element) { 3 } it 'adds element to set' do expect { set.add(element) }.to change { set.data.length }.by(1) end end end describe '#remove' do subject(:remove_element) { set.remove(element) } let(:init_data) { [1, 2] } after do expect(set.exist?(element)).to eq false end context 'removed element exists in set' do let(:element) { 1 } it 'removes element from set' do expect { remove_element }.to change { set.data.length }.by(-1) expect(remove_element).to eq element end end context 'removed element does not exists in set' do let(:element) { 3 } it 'does not remove element from set' do expect { set.remove(element) }.not_to change { set.data.length } expect(remove_element).to be_nil end end end end