# frozen_string_literal: true

RSpec.describe Fear::OptionPatternMatch do
  context "Some" do
    let(:matcher) do
      described_class.new do |m|
        m.some(:even?.to_proc) { |x| "#{x} is even" }
        m.some(:odd?.to_proc) { |x| "#{x} is odd" }
      end
    end

    it do
      expect(matcher.(Fear.some(4))).to eq("4 is even")
      expect(matcher.(Fear.some(3))).to eq("3 is odd")
      expect do
        matcher.(Fear.none)
      end.to raise_error(Fear::MatchError)
    end
  end

  context "None" do
    let(:matcher) do
      described_class.new do |m|
        m.none { "nil" }
      end
    end

    it do
      expect(matcher.(Fear.none)).to eq("nil")
      expect do
        matcher.(Fear.some(3))
      end.to raise_error(Fear::MatchError)
    end
  end
end
