#!/usr/bin/env ruby
#
# Put description here
#
# 
# 
# 
#

require 'swig_assert'

require 'ruby_keywords'

kw = Ruby_keywords::Keywords.new

if kw.alias != 'alias' then
 raise RuntimeError, 'Keyword method did not work: alias'
end

if kw.and != 'and' then
 raise RuntimeError, 'Keyword method did not work: and'
end

if kw.begin != 'begin' then
 raise RuntimeError, 'Keyword method did not work: begin'
end

if kw.break != 'break' then
 raise RuntimeError, 'Keyword method did not work: break'
end

if kw.case != 'case' then
 raise RuntimeError, 'Keyword method did not work: case'
end

if kw.class != 'class' then
 raise RuntimeError, 'Keyword method did not work: class'
end

if kw.def != 'def' then
 raise RuntimeError, 'Keyword method did not work: def'
end

if kw.defined? != 'defined?' then
 raise RuntimeError, 'Keyword method did not work: defined?'
end

if kw.do != 'do' then
 raise RuntimeError, 'Keyword method did not work: do'
end

if kw.else != 'else' then
 raise RuntimeError, 'Keyword method did not work: else'
end

if kw.elsif != 'elsif' then
 raise RuntimeError, 'Keyword method did not work: elsif'
end

if kw.end != 'end' then
 raise RuntimeError, 'Keyword method did not work: end'
end

if kw.ensure != 'ensure' then
 raise RuntimeError, 'Keyword method did not work: ensure'
end

if kw.false != 'false' then
 raise RuntimeError, 'Keyword method did not work: false'
end

if kw.for != 'for' then
 raise RuntimeError, 'Keyword method did not work: for'
end

if kw.if != 'if' then
 raise RuntimeError, 'Keyword method did not work: if'
end

if kw.in != 'in' then
 raise RuntimeError, 'Keyword method did not work: in'
end

if kw.module != 'module' then
 raise RuntimeError, 'Keyword method did not work: module'
end

if kw.next != 'next' then
 raise RuntimeError, 'Keyword method did not work: next'
end

if kw.nil != 'nil' then
 raise RuntimeError, 'Keyword method did not work: nil'
end

if kw.not != 'not' then
 raise RuntimeError, 'Keyword method did not work: not'
end

if kw.or != 'or' then
 raise RuntimeError, 'Keyword method did not work: or'
end

if kw.redo != 'redo' then
 raise RuntimeError, 'Keyword method did not work: redo'
end

if kw.rescue != 'rescue' then
 raise RuntimeError, 'Keyword method did not work: rescue'
end

if kw.retry != 'retry' then
 raise RuntimeError, 'Keyword method did not work: retry'
end

if kw.return != 'return' then
 raise RuntimeError, 'Keyword method did not work: return'
end

if kw.self != 'self' then
 raise RuntimeError, 'Keyword method did not work: self'
end

if kw.super != 'super' then
 raise RuntimeError, 'Keyword method did not work: super'
end

if kw.then != 'then' then
 raise RuntimeError, 'Keyword method did not work: then'
end

if kw.true != 'true' then
 raise RuntimeError, 'Keyword method did not work: true'
end

if kw.under != 'under' then
 raise RuntimeError, 'Keyword method did not work: under'
end

if kw.unless != 'unless' then
 raise RuntimeError, 'Keyword method did not work: unless'
end

if kw.until != 'until' then
 raise RuntimeError, 'Keyword method did not work: until'
end

if kw.when != 'when' then
 raise RuntimeError, 'Keyword method did not work: when'
end

if kw.while != 'while' then
 raise RuntimeError, 'Keyword method did not work: while'
end

if kw.yield != 'yield' then
 raise RuntimeError, 'Keyword method did not work: yield'
end

