module Chervil RSpec.describe Lexer do it 'lexes parens' do expect(Lexer.new('()').tokenize).to eq( [ Token.new(:lparen, '('), Token.new(:rparen, ')'), Token.new(:eof, 'eof') ] ) end it 'lexes integers' do expect(Lexer.new('1').get_next_token).to eq(Token.new(:number, '1')) end it 'lexes floats' do expect(Lexer.new('2.3').get_next_token).to eq(Token.new(:number, '2.3')) end it 'ignores whitespace' do expect(Lexer.new('1 2 3').tokenize).to eq( [ Token.new(:number, '1'), Token.new(:number, '2'), Token.new(:number, '3'), Token.new(:eof, 'eof') ] ) end it 'lexes identifiers' do expect(Lexer.new('hello').get_next_token).to eq( Token.new(:identifier, 'hello') ) end end end