Last active
November 11, 2018 02:54
-
-
Save ngocbv/58c5645a1c47e92117d78d78103a85dc to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| class CustomSet | |
| attr_reader :data | |
| def initialize(init_data) | |
| @data = init_data | |
| end | |
| def exist?(element) | |
| @data.each do |record| | |
| if element == record | |
| return true | |
| end | |
| end | |
| false | |
| end | |
| def add(element) | |
| @data << element unless exist?(element) | |
| end | |
| def remove(element) | |
| @data.delete(element) | |
| end | |
| end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment