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

require 'swig_assert'

require 'ruby_naming'

# Check class names
if not Ruby_naming
  raise RuntimeError, 'Invalid module name for Ruby_naming'
end

if not Ruby_naming::MyClass
  raise RuntimeError, 'Invalid class name for MyClass'
end


# Check constant names / values
if Ruby_naming::CONSTANT1 != 1
  raise RuntimeError, "Incorrect value for CONSTANT1" 
end

if Ruby_naming::CONSTANT2 != 2
  raise RuntimeError, "Incorrect value for CONSTANT2" 
end

# Check constant names / values
if Ruby_naming::CONSTANT3 != 3
  raise RuntimeError, "Incorrect value for CONSTANT3" 
end

if not (Ruby_naming::methods.include?("constant4") || Ruby_naming::methods.include?(:constant4))
  raise RuntimeError, "Incorrect mapping for constant4" 
end

if not (Ruby_naming::methods.include?("constant5") || Ruby_naming::methods.include?(:constant5))
  raise RuntimeError, "Incorrect mapping for constant5" 
end

if not (Ruby_naming::methods.include?("constant6") || Ruby_naming::methods.include?(:constant6))
  raise RuntimeError, "Incorrect mapping for constant6" 
end

if not (Ruby_naming::TestConstants.instance_methods.include?("constant7") || Ruby_naming::TestConstants.instance_methods.include?(:constant7))
  raise RuntimeError, "Incorrect mapping for constant7" 
end

if not (Ruby_naming::TestConstants.methods.include?("constant8") || Ruby_naming::TestConstants.methods.include?(:constant8))
  raise RuntimeError, "Incorrect mapping for constant8" 
end

# There is no constant9 because it is illegal C++
#if not Ruby_naming::TestConstants.instance_methods.include?("constant9")
#  raise RuntimeError, "Incorrect mapping for constant9" 
#end

if Ruby_naming::TestConstants::CONSTANT10 != 10
  raise RuntimeError, "Incorrect value for CONSTANT10" 
end

if not (Ruby_naming::methods.include?("constant11") || Ruby_naming::methods.include?(:constant11))
  raise RuntimeError, "Incorrect mapping for constant11" 
end


# Check enums
if Ruby_naming::constants.include?("Color")
  raise RuntimeError, "Color enum should not be exposed to Ruby" 
end

if Ruby_naming::Red != 0
  raise RuntimeError, "Incorrect value for enum RED" 
end

if Ruby_naming::Green != 1
  raise RuntimeError, "Incorrect value for enum GREEN" 
end

if Ruby_naming::Blue != 2
  raise RuntimeError, "Incorrect value for enum BLUE" 
end


# Check method names
my_class = Ruby_naming::MyClass.new()

if my_class.method_one != 1 
  raise RuntimeError, "Incorrect value for method_one" 
end
  
if my_class.method_two != 2
  raise RuntimeError, "Incorrect value for method_two" 
end

if my_class.method_three != 3
  raise RuntimeError, "Incorrect value for method_three" 
end

if my_class.method_44_4 != 4
  raise RuntimeError, "Incorrect value for method_44_4" 
end

if my_class.predicate_method? != true
  raise RuntimeError, "Incorrect value for predicate_method?" 
end

if my_class.bang_method! != true
  raise RuntimeError, "Incorrect value for bang_method!" 
end


# Check that std::vector<bool>'s partial specialization survives -autorename (Github issue #3546)
if not Ruby_naming::VectorBool
  raise RuntimeError, 'Invalid class name for VectorBool'
end

vb = Ruby_naming::VectorBool.new(3)

if vb.size != 3
  raise RuntimeError, "Incorrect size for VectorBool"
end

vb[0] = true
vb[1] = false
vb[2] = true

if vb[0] != true || vb[1] != false || vb[2] != true
  raise RuntimeError, "Incorrect element values for VectorBool"
end
