loading
Generated 2024-06-24T00:15:37+07:00

All Files ( 100.0% covered at 1.76 hits/line )

3 files in total.
45 relevant lines, 45 lines covered and 0 lines missed. ( 100.0% )
File % covered Lines Relevant Lines Lines covered Lines missed Avg. Hits / Line
custom_exceptions/stack_is_empty.rb 100.00 % 3 1 1 0 1.00
spec/stack_spec.rb 100.00 % 58 30 30 0 1.47
structures/stack.rb 100.00 % 27 14 14 0 2.43

custom_exceptions/stack_is_empty.rb

100.0% lines covered

1 relevant lines. 1 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 class StackIsEmpty < StandardError; end

spec/stack_spec.rb

100.0% lines covered

30 relevant lines. 30 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 require_relative '../structures/stack'
  3. 1 require_relative '../custom_exceptions/stack_is_empty'
  4. 1 RSpec.describe Stack do
  5. 8 let(:stack) { Stack.new }
  6. 4 let(:rand_element) { Faker::Number.number(digits: 5) }
  7. 1 shared_examples 'when stack is empty' do |method|
  8. 2 it "raise StackIsEmpty exception on #{method}" do
  9. 4 expect{stack.public_send(method)}.to raise_exception(StackIsEmpty)
  10. end
  11. end
  12. 1 describe 'methods' do
  13. 1 describe 'push' do
  14. 1 it 'should push an element onto the top' do
  15. 1 stack.push(rand_element)
  16. 1 expect(stack.peak).to eq(rand_element)
  17. end
  18. end
  19. 1 describe 'pop' do
  20. 1 it 'return the top element (and removing it) when the stack has element' do
  21. 1 stack.push(rand_element)
  22. 1 expect(stack.pop).to eq(rand_element)
  23. end
  24. 1 it_behaves_like 'when stack is empty', :pop
  25. end
  26. 1 describe 'peak' do
  27. 1 it 'return the top element (without removing it) when the stack has element' do
  28. 1 stack.push(rand_element)
  29. 1 expect(stack.peak).to eq(rand_element)
  30. 1 expect(stack.empty?).to be_falsey
  31. end
  32. 1 it_behaves_like 'when stack is empty', :peak
  33. end
  34. 1 describe 'empty?' do
  35. 1 it 'return false if the stack has element' do
  36. 1 stack.push(1)
  37. 1 expect(stack.empty?).to be_falsey
  38. end
  39. 1 it 'return true if the stack is empty' do
  40. 1 expect(stack.empty?).to be_truthy
  41. end
  42. end
  43. end
  44. end

structures/stack.rb

100.0% lines covered

14 relevant lines. 14 lines covered and 0 lines missed.
    
  1. # frozen_string_literal: true
  2. 1 class Stack
  3. 1 attr_reader :elements
  4. 1 def initialize
  5. 7 @elements = []
  6. end
  7. 1 def push(element)
  8. 4 elements.push(element)
  9. end
  10. 1 def pop
  11. 2 raise StackIsEmpty if empty?
  12. 1 elements.pop
  13. end
  14. 1 def peak
  15. 3 raise StackIsEmpty if empty?
  16. 2 elements.last
  17. end
  18. 1 def empty?
  19. 8 elements.empty?
  20. end
  21. end