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