class Object

Constants

A
B
CString
GlassRecord
IntVector
K
T
Value

Public Class Methods

new(*args, **kws) click to toggle source
Calls superclass method
# File lib/autoc/scaffold/tests.rb, line 31
def initialize(*args, **kws)
  super(*args, visibility: :public, **kws)
  @tests = []
  @test_names = []
  dependencies << $common
end

Public Instance Methods

cleanup(code = nil) click to toggle source
# File lib/autoc/scaffold/tests.rb, line 40
def cleanup(code = nil)
  @cleanup_code = code
end
cmakelists_txt(project) click to toggle source
# File lib/autoc/scaffold/project.rb, line 20
def cmakelists_txt(project)
<<END
cmake_minimum_required(VERSION 3.15)

project(#{project})

set(AUTOC_MODULE_NAME _${PROJECT_NAME})
set(AUTOC_MODULE_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.rb)

list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake)

include(AutoC)

add_autoc_module(
  ${AUTOC_MODULE_NAME}
  DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
  MAIN_DEPENDENCY ${AUTOC_MODULE_SOURCE}
  COMMAND ${Ruby_EXECUTABLE} ${AUTOC_MODULE_SOURCE}
)

add_executable(${PROJECT_NAME} ${PROJECT_NAME}.c)
target_link_libraries(${PROJECT_NAME} ${AUTOC_MODULE_NAME})
END
end
docs(= require_relative 'scaffold/docs') click to toggle source

Generate generated interface reference header to processable with Doxygen

# File lib/autoc/scaffold.rb, line 6
def docs = require_relative 'scaffold/docs'

# Generated test suite
def tests = require_relative 'scaffold/tests'

# Generate skeleton project
def project
project(= require_relative 'scaffold/project') click to toggle source

Generate skeleton project

# File lib/autoc/scaffold.rb, line 12
def project = require_relative
project_c(project) click to toggle source
# File lib/autoc/scaffold/project.rb, line 2
def project_c(project)
<<END
#include "_#{project}_auto.h"

#include <stdio.h>

int main(int argc, char **argv) {
  CString msg;
  CStringCreateFormat(&msg, "Hello %s!\\n", "#{project}");
  printf(msg);
  CStringDestroy(&msg);
  return 0;
}
END
end
project_rb(project) click to toggle source
# File lib/autoc/scaffold/project.rb, line 47
def project_rb(project)
<<END
require 'autoc/module'
require 'autoc/cstring'

m = AutoC::Module.render(:_#{project}) do |m|
  m << AutoC::CString.new
end

require 'autoc/cmake'

AutoC::CMake.render(m)
END
end
render_forward_declarations(stream) click to toggle source
Calls superclass method
# File lib/autoc/scaffold/test_int_hash_set.rb, line 7
def render_forward_declarations(stream)
        super
        stream << "void #{dump}(#{const_rvalue} target);"
end
render_implementation(stream) click to toggle source
Calls superclass method
# File lib/autoc/scaffold/test_int_hash_set.rb, line 12
def render_implementation(stream)
        super
        stream << %{
                #include <stdio.h>
                void #{dump}(#{const_rvalue} target) {
                        #{range} r;
                        for(r = #{range.new}(target); !#{range.empty}(&r); #{range.pop_front}(&r)) {
                                printf("%d ", #{range.take_front}(&r));
                        }
                        printf("\\n");
                }
        }
end
setup(code = nil) click to toggle source
# File lib/autoc/scaffold/tests.rb, line 37
def setup(code = nil)
  @setup_code = code
end
test(name, code) click to toggle source
# File lib/autoc/scaffold/tests.rb, line 43
def test(name, code)
  s = name.to_s
  @test_names << [name, func_name = identifier("test_#{name}")]
  @tests << %{
    void #{func_name}(void) {
      #{@setup_code}
      #{code}
      #{@cleanup_code}
    } /* #{func_name} */ 
  }
end
tests(= require_relative 'scaffold/tests') click to toggle source

Generated test suite

# File lib/autoc/scaffold.rb, line 9
def tests = require_relative 'scaffold/tests'

# Generate skeleton project
def project =
type_test(cls, *opts, **kws, &code) click to toggle source
# File lib/autoc/scaffold/tests.rb, line 28
def type_test(cls, *opts, **kws, &code)
  t = Class.new(cls) do
    attr_reader :tests
    def initialize(*args, **kws)
      super(*args, visibility: :public, **kws)
      @tests = []
      @test_names = []
      dependencies << $common
    end
    def setup(code = nil)
      @setup_code = code
    end
    def cleanup(code = nil)
      @cleanup_code = code
    end
    def test(name, code)
      s = name.to_s
      @test_names << [name, func_name = identifier("test_#{name}")]
      @tests << %{
        void #{func_name}(void) {
          #{@setup_code}
          #{code}
          #{@cleanup_code}
        } /* #{func_name} */ 
      }
    end
    def render_forward_declarations(stream)
      super
      stream << "void #{run_tests}(void);"
    end
    def render_implementation(stream)
      super
      @tests.each { |f| stream << f }
      stream << "void #{run_tests}(void) {"
      stream << %{
        fprintf(stdout, "* %s\\n", "#{type}");
        fflush(stdout);
      }
      @test_names.each { |name, func_name| stream << %$run_test("#{name}", #{func_name});$ }
      stream << %$fputs("\\n", stdout); fflush(stdout);}$
    end
    def write_test_calls(stream)
      stream << "#{run_tests}();"
    end
  end.new(*opts, **kws)
  $tests << t
  t.instance_eval(&code)
  t
end
write_test_calls(stream) click to toggle source
# File lib/autoc/scaffold/tests.rb, line 69
def write_test_calls(stream)
  stream << "#{run_tests}();"
end