cgen 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +5 -0
- data/History.txt +199 -0
- data/README.txt +34 -0
- data/examples/bench.rb +14 -0
- data/examples/complex.rb +63 -0
- data/examples/complex2.rb +48 -0
- data/examples/cshadow-example.rb +55 -0
- data/examples/cshadow-point.rb +58 -0
- data/examples/ctest.rb +34 -0
- data/examples/ctest2.rb +32 -0
- data/examples/ctest3.rb +179 -0
- data/examples/ctest4.rb +18 -0
- data/examples/ctest5.rb +27 -0
- data/examples/example-ruby-talk-30April2004.rb +65 -0
- data/examples/fixed-array.rb +221 -0
- data/examples/inherit-example.rb +26 -0
- data/examples/inherit-example.txt +80 -0
- data/examples/instance-eval.rb +66 -0
- data/examples/ivset.rb +55 -0
- data/examples/marshal-test.rb +19 -0
- data/examples/matrix.rb +91 -0
- data/examples/modular-def.rb +87 -0
- data/examples/objattr.rb +46 -0
- data/examples/opaque-struct-test.rb +36 -0
- data/examples/sample.rb +184 -0
- data/examples/struct.rb +103 -0
- data/examples/test.rb +24 -0
- data/examples/yaml.rb +56 -0
- data/install.rb +1015 -0
- data/lib/cgen/attribute.rb +414 -0
- data/lib/cgen/cgen.rb +2041 -0
- data/lib/cgen/cshadow.rb +1037 -0
- data/lib/cgen/inherit.rb +46 -0
- data/rakefile +42 -0
- data/tasks/ann.rake +80 -0
- data/tasks/bones.rake +20 -0
- data/tasks/gem.rake +201 -0
- data/tasks/git.rake +40 -0
- data/tasks/notes.rake +27 -0
- data/tasks/post_load.rake +34 -0
- data/tasks/rdoc.rake +51 -0
- data/tasks/rubyforge.rake +55 -0
- data/tasks/setup.rb +292 -0
- data/tasks/spec.rake +54 -0
- data/tasks/svn.rake +47 -0
- data/tasks/test.rake +40 -0
- data/tasks/zentest.rake +36 -0
- data/test/test-attribute.rb +430 -0
- data/test/test-cgen.rb +127 -0
- data/test/test-cshadow.rb +289 -0
- data/test/test.rb +17 -0
- metadata +123 -0
    
        data/test/test-cgen.rb
    ADDED
    
    | @@ -0,0 +1,127 @@ | |
| 1 | 
            +
            require 'test/unit'
         | 
| 2 | 
            +
            require 'cgen/cgen'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
             | 
| 5 | 
            +
            class BasicTemplateTest < Test::Unit::TestCase
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              class BasicTemplate < CGenerator::Template
         | 
| 8 | 
            +
                accumulator(:acc0, :acc1, :acc2)
         | 
| 9 | 
            +
                def initialize(*args)
         | 
| 10 | 
            +
                  super
         | 
| 11 | 
            +
                  add 'acc 0 is ', acc0!, 'acc 1 is ', acc1!, 'acc 2 is ', acc2!
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              def setup
         | 
| 16 | 
            +
                @template = BasicTemplate.new
         | 
| 17 | 
            +
                @template.acc0 "zero", "zippo", "zed"
         | 
| 18 | 
            +
                @template.acc1 "one", "unity", "uno"
         | 
| 19 | 
            +
                @template.acc2 "two", "deuce", "brace"
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
              alias set_up setup
         | 
| 22 | 
            +
             | 
| 23 | 
            +
              def test_accumulator
         | 
| 24 | 
            +
                result = ['acc 0 is ', "zero", "zippo", "zed",
         | 
| 25 | 
            +
                          'acc 1 is ', "one", "unity", "uno",
         | 
| 26 | 
            +
                          'acc 2 is ', "two", "deuce", "brace"].join "\n"
         | 
| 27 | 
            +
                assert_equal(result, @template.to_s)
         | 
| 28 | 
            +
              end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
             | 
| 33 | 
            +
            class CFragmentTest < Test::Unit::TestCase
         | 
| 34 | 
            +
             | 
| 35 | 
            +
              class CodeTemplate < CGenerator::CFragment
         | 
| 36 | 
            +
                accumulator(:decl) {StatementKeyAccumulator}
         | 
| 37 | 
            +
                accumulator(:block) {BlockAccumulator}
         | 
| 38 | 
            +
                accumulator(:inner, :outer) {StatementAccumulator}
         | 
| 39 | 
            +
                def initialize(*args)
         | 
| 40 | 
            +
                  super
         | 
| 41 | 
            +
                  add decl!, block(inner!), outer!
         | 
| 42 | 
            +
                end
         | 
| 43 | 
            +
              end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
              def setup
         | 
| 46 | 
            +
                @template = CodeTemplate.new
         | 
| 47 | 
            +
                @template.decl :i => "int i"
         | 
| 48 | 
            +
                @template.inner "i = 0"
         | 
| 49 | 
            +
                @template.outer "f = 1.3"
         | 
| 50 | 
            +
                @template.decl :f => "float f"
         | 
| 51 | 
            +
              end
         | 
| 52 | 
            +
              alias set_up setup
         | 
| 53 | 
            +
             | 
| 54 | 
            +
              def test_accumulator
         | 
| 55 | 
            +
                result = <<-END
         | 
| 56 | 
            +
                  int i;
         | 
| 57 | 
            +
                  float f;
         | 
| 58 | 
            +
                  {
         | 
| 59 | 
            +
                      i = 0;
         | 
| 60 | 
            +
                  }
         | 
| 61 | 
            +
                  f = 1.3;
         | 
| 62 | 
            +
                END
         | 
| 63 | 
            +
                result = result.chomp.tabto 0
         | 
| 64 | 
            +
                assert_equal(result, @template.to_s)
         | 
| 65 | 
            +
              end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
            end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
             | 
| 70 | 
            +
            class LibraryTest < Test::Unit::TestCase
         | 
| 71 | 
            +
              class Sample
         | 
| 72 | 
            +
              end
         | 
| 73 | 
            +
             | 
| 74 | 
            +
              ##=== setup code to be done once ===##
         | 
| 75 | 
            +
              @lib = CGenerator::Library.new "cgen_test_lib"
         | 
| 76 | 
            +
             | 
| 77 | 
            +
              @lib.define_c_method(Sample, :add).instance_eval {
         | 
| 78 | 
            +
                arguments "x", "y"
         | 
| 79 | 
            +
                returns "rb_float_new(NUM2DBL(x) + NUM2DBL(y))"
         | 
| 80 | 
            +
              }
         | 
| 81 | 
            +
             | 
| 82 | 
            +
              @lib.define_c_singleton_method(Sample, :reverse).instance_eval {
         | 
| 83 | 
            +
                rb_array_args
         | 
| 84 | 
            +
                declare :result => "VALUE result"
         | 
| 85 | 
            +
                reverse_c_name = declare_symbol :reverse
         | 
| 86 | 
            +
                body "result = rb_funcall(args, #{reverse_c_name}, 0)"
         | 
| 87 | 
            +
                returns "result"
         | 
| 88 | 
            +
              }
         | 
| 89 | 
            +
             | 
| 90 | 
            +
            #    @lib.declare_symbol "just_to_be_unique_#{(Time.now.to_f * 1000).to_i}"
         | 
| 91 | 
            +
             | 
| 92 | 
            +
              other_include_file, other_source_file = @lib.add_file "other_file"
         | 
| 93 | 
            +
             | 
| 94 | 
            +
              other_source_file.define_c_method(Sample, :sub).instance_eval {
         | 
| 95 | 
            +
                scope "extern"
         | 
| 96 | 
            +
                arguments "x", "y"
         | 
| 97 | 
            +
                returns "rb_float_new(NUM2DBL(x) - NUM2DBL(y))"
         | 
| 98 | 
            +
              }
         | 
| 99 | 
            +
             | 
| 100 | 
            +
              attr_accessor :ba
         | 
| 101 | 
            +
             | 
| 102 | 
            +
              @lib.before_commit { @@ba = [1] }
         | 
| 103 | 
            +
              @lib.before_commit { @@ba << 2 }
         | 
| 104 | 
            +
              @lib.after_commit  { @@ba << 3 }
         | 
| 105 | 
            +
              @lib.after_commit  { @@ba << 4 }
         | 
| 106 | 
            +
             | 
| 107 | 
            +
              require 'fileutils'
         | 
| 108 | 
            +
              dir = File.join("tmp", RUBY_VERSION)
         | 
| 109 | 
            +
              FileUtils.mkpath dir
         | 
| 110 | 
            +
              Dir.chdir dir do
         | 
| 111 | 
            +
                @lib.commit
         | 
| 112 | 
            +
              end
         | 
| 113 | 
            +
              ##==================================##
         | 
| 114 | 
            +
             | 
| 115 | 
            +
              def test_add
         | 
| 116 | 
            +
                assert_equal(3, Sample.new.add(1, 2))
         | 
| 117 | 
            +
            #      assert_equal(-1, Sample.new.sub(1, 2))
         | 
| 118 | 
            +
              end
         | 
| 119 | 
            +
             | 
| 120 | 
            +
              def test_reverse
         | 
| 121 | 
            +
                assert_equal([6, 5, 4], Sample.reverse(4, 5, 6))
         | 
| 122 | 
            +
              end
         | 
| 123 | 
            +
             | 
| 124 | 
            +
              def test_before_after
         | 
| 125 | 
            +
                assert_equal([1,2,4,3], @@ba)
         | 
| 126 | 
            +
              end
         | 
| 127 | 
            +
            end
         | 
| @@ -0,0 +1,289 @@ | |
| 1 | 
            +
            require 'test/unit'
         | 
| 2 | 
            +
            require 'cgen/cshadow'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            #
         | 
| 5 | 
            +
            #  Tests in this file focus on:
         | 
| 6 | 
            +
            #   - shadow objects in general, rather than particular attribute
         | 
| 7 | 
            +
            #     types, which are tested in attribute.rb
         | 
| 8 | 
            +
            #   - behavior accessible from Ruby. The examples (complex.rb,
         | 
| 9 | 
            +
            #     matrix.rb) test shadow objects from C.
         | 
| 10 | 
            +
            #  Features tested include inheritance, multiple attributes, omission
         | 
| 11 | 
            +
            #  of readers or writers, etc.
         | 
| 12 | 
            +
            #
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            # EmptyBase hierarchy tests the following:
         | 
| 15 | 
            +
            #  - inheritance with "gaps"
         | 
| 16 | 
            +
            #  - using the same attr name in parallel branches
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            class EmptyBase
         | 
| 19 | 
            +
              include CShadow
         | 
| 20 | 
            +
            end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
            class EBSub_1 < EmptyBase
         | 
| 23 | 
            +
              shadow_attr_accessor :x => "int x"
         | 
| 24 | 
            +
            end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
            class EBSub_1_1 < EBSub_1
         | 
| 27 | 
            +
            end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
            class EBSub_2 < EmptyBase
         | 
| 30 | 
            +
            end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            class EBSub_2_2 < EBSub_2
         | 
| 33 | 
            +
              shadow_attr_accessor :x => "int x"
         | 
| 34 | 
            +
            end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
             | 
| 37 | 
            +
            # Base hierarchy tests the following:
         | 
| 38 | 
            +
            #  - inheritance with multiple attributes
         | 
| 39 | 
            +
            #  - omission of readers and writers
         | 
| 40 | 
            +
            #  - accessors with different names than the variables
         | 
| 41 | 
            +
            #  - conflicting accessor names or C variable names
         | 
| 42 | 
            +
            #  - #each_shadow_attr and #shadow_attrs
         | 
| 43 | 
            +
            #  - protected and private attrs
         | 
| 44 | 
            +
             | 
| 45 | 
            +
            class Base
         | 
| 46 | 
            +
              include CShadow
         | 
| 47 | 
            +
              shadow_attr_reader :x => 'int x'
         | 
| 48 | 
            +
              shadow_attr_writer :y => 'int y'
         | 
| 49 | 
            +
              shadow_attr_accessor :obj => Array
         | 
| 50 | 
            +
              shadow_attr_accessor :nonpersistent, :np => Object
         | 
| 51 | 
            +
            end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
            class Sub_1 < Base
         | 
| 54 | 
            +
              shadow_attr :z => 'int zzz'
         | 
| 55 | 
            +
            end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
            # test a class with no shadow_attrs
         | 
| 58 | 
            +
            class Sub_2 < Base
         | 
| 59 | 
            +
              attr_reader :ruby_reader
         | 
| 60 | 
            +
              attr_writer :ruby_writer
         | 
| 61 | 
            +
            end
         | 
| 62 | 
            +
             | 
| 63 | 
            +
            module Mod_For_Sub_3
         | 
| 64 | 
            +
              class Sub_3 < Base
         | 
| 65 | 
            +
                # Make sure the nested class name bug isn't biting today.
         | 
| 66 | 
            +
              end
         | 
| 67 | 
            +
            end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
            class Sub_4 < Base
         | 
| 70 | 
            +
              private :x
         | 
| 71 | 
            +
              protected :y=
         | 
| 72 | 
            +
            end
         | 
| 73 | 
            +
             | 
| 74 | 
            +
            # OtherBase tests using shadow_library to specify another library
         | 
| 75 | 
            +
            # to put definitions in. OtherFile tests using shadow_library_file
         | 
| 76 | 
            +
            # to put definintions in another file within the same library.
         | 
| 77 | 
            +
             | 
| 78 | 
            +
            class OtherBase
         | 
| 79 | 
            +
              include CShadow
         | 
| 80 | 
            +
              shadow_library Base
         | 
| 81 | 
            +
              shadow_attr_accessor :str => "char *pchar"
         | 
| 82 | 
            +
            end
         | 
| 83 | 
            +
             | 
| 84 | 
            +
            class OtherFile < OtherBase
         | 
| 85 | 
            +
              shadow_library_file "OtherFile"
         | 
| 86 | 
            +
              shadow_attr_accessor :x => "double x"
         | 
| 87 | 
            +
            end
         | 
| 88 | 
            +
             | 
| 89 | 
            +
             | 
| 90 | 
            +
            # Compile-time tests (that is, pre-commit)
         | 
| 91 | 
            +
             | 
| 92 | 
            +
            class CompileTimeTestCase < Test::Unit::TestCase
         | 
| 93 | 
            +
              def test_conflict
         | 
| 94 | 
            +
                assert_raises(NameError) {
         | 
| 95 | 
            +
                  Sub_2.class_eval {
         | 
| 96 | 
            +
                    shadow_attr "y" => 'char * yy'
         | 
| 97 | 
            +
                  }
         | 
| 98 | 
            +
                }
         | 
| 99 | 
            +
                assert_raises(NameError) {
         | 
| 100 | 
            +
                  Sub_2.class_eval {
         | 
| 101 | 
            +
                    shadow_attr :y => 'char * yy'
         | 
| 102 | 
            +
                  }
         | 
| 103 | 
            +
                }
         | 
| 104 | 
            +
                assert_raises(NameError) {
         | 
| 105 | 
            +
                  Sub_2.class_eval {
         | 
| 106 | 
            +
                    shadow_attr :yy => 'char * y'
         | 
| 107 | 
            +
                  }
         | 
| 108 | 
            +
                }
         | 
| 109 | 
            +
             | 
| 110 | 
            +
                # Checking overwrite by attr_*
         | 
| 111 | 
            +
                assert_raises(NameError) {
         | 
| 112 | 
            +
                  Sub_2.class_eval {
         | 
| 113 | 
            +
                    attr_accessor :y
         | 
| 114 | 
            +
                  }
         | 
| 115 | 
            +
                }
         | 
| 116 | 
            +
                assert_raises(NameError) {
         | 
| 117 | 
            +
                  Sub_2.class_eval {
         | 
| 118 | 
            +
                    attr_reader :y
         | 
| 119 | 
            +
                  }
         | 
| 120 | 
            +
                }
         | 
| 121 | 
            +
                assert_raises(NameError) {
         | 
| 122 | 
            +
                  Sub_2.class_eval {
         | 
| 123 | 
            +
                    attr_writer :y
         | 
| 124 | 
            +
                  }
         | 
| 125 | 
            +
                }
         | 
| 126 | 
            +
             | 
| 127 | 
            +
                # Checking overwrite by shadow_attr_*
         | 
| 128 | 
            +
                assert_raises(NameError) {
         | 
| 129 | 
            +
                  Sub_2.class_eval {
         | 
| 130 | 
            +
                   shadow_attr_reader :ruby_writer => Object
         | 
| 131 | 
            +
                  }
         | 
| 132 | 
            +
                }
         | 
| 133 | 
            +
                assert_raises(NameError) {
         | 
| 134 | 
            +
                  Sub_2.class_eval {
         | 
| 135 | 
            +
                   shadow_attr_writer :ruby_reader => Object
         | 
| 136 | 
            +
                  }
         | 
| 137 | 
            +
                }
         | 
| 138 | 
            +
              end
         | 
| 139 | 
            +
            end
         | 
| 140 | 
            +
             | 
| 141 | 
            +
            require 'fileutils'
         | 
| 142 | 
            +
            dir = File.join("tmp", RUBY_VERSION)
         | 
| 143 | 
            +
            FileUtils.mkpath dir
         | 
| 144 | 
            +
            Dir.chdir dir do
         | 
| 145 | 
            +
              EmptyBase.commit
         | 
| 146 | 
            +
              Base.commit         # do not commit OtherBase
         | 
| 147 | 
            +
            end
         | 
| 148 | 
            +
             | 
| 149 | 
            +
            METHOD_MISSING_ERROR =
         | 
| 150 | 
            +
              RUBY_VERSION.to_f >= 1.7 ?
         | 
| 151 | 
            +
                NoMethodError :
         | 
| 152 | 
            +
                NameError
         | 
| 153 | 
            +
             | 
| 154 | 
            +
            # Run-time tests (that is, post-commit)
         | 
| 155 | 
            +
             | 
| 156 | 
            +
            class EmptyBaseTestCase < Test::Unit::TestCase
         | 
| 157 | 
            +
             | 
| 158 | 
            +
              def test_empty_base
         | 
| 159 | 
            +
                ebs1 = EBSub_1.new
         | 
| 160 | 
            +
                ebs2 = EBSub_2.new
         | 
| 161 | 
            +
                ebs11 = EBSub_1_1.new
         | 
| 162 | 
            +
                ebs22 = EBSub_2_2.new
         | 
| 163 | 
            +
             | 
| 164 | 
            +
                ebs1.x = 3
         | 
| 165 | 
            +
                ebs11.x = 4
         | 
| 166 | 
            +
                ebs22.x = 5
         | 
| 167 | 
            +
             | 
| 168 | 
            +
                assert_raises(METHOD_MISSING_ERROR) {
         | 
| 169 | 
            +
                  ebs2.x = 6
         | 
| 170 | 
            +
                }
         | 
| 171 | 
            +
             | 
| 172 | 
            +
                assert_equal(3, ebs1.x)
         | 
| 173 | 
            +
                assert_equal(4, ebs11.x)
         | 
| 174 | 
            +
                assert_equal(5, ebs22.x)
         | 
| 175 | 
            +
              end
         | 
| 176 | 
            +
             | 
| 177 | 
            +
            end
         | 
| 178 | 
            +
             | 
| 179 | 
            +
            class BaseTestCase < Test::Unit::TestCase
         | 
| 180 | 
            +
             | 
| 181 | 
            +
              def test_limited_access
         | 
| 182 | 
            +
                b = Sub_1.new
         | 
| 183 | 
            +
             | 
| 184 | 
            +
                assert_raises(METHOD_MISSING_ERROR) {
         | 
| 185 | 
            +
                  b.x = 1
         | 
| 186 | 
            +
                }
         | 
| 187 | 
            +
                assert_equal(0, b.x)
         | 
| 188 | 
            +
             | 
| 189 | 
            +
                b.y = 2
         | 
| 190 | 
            +
                assert_raises(METHOD_MISSING_ERROR) {
         | 
| 191 | 
            +
                  b.y
         | 
| 192 | 
            +
                }
         | 
| 193 | 
            +
             | 
| 194 | 
            +
                assert_raises(METHOD_MISSING_ERROR) {
         | 
| 195 | 
            +
                  b.z = 3
         | 
| 196 | 
            +
                }
         | 
| 197 | 
            +
                assert_raises(METHOD_MISSING_ERROR) {
         | 
| 198 | 
            +
                  b.z
         | 
| 199 | 
            +
                }
         | 
| 200 | 
            +
              end
         | 
| 201 | 
            +
             | 
| 202 | 
            +
              def test_inherit
         | 
| 203 | 
            +
                b = Sub_1.new
         | 
| 204 | 
            +
             | 
| 205 | 
            +
                # test inheritance of attr initializers
         | 
| 206 | 
            +
                assert_equal(nil, b.obj)
         | 
| 207 | 
            +
             | 
| 208 | 
            +
                # test inheritance of attr dump/load code
         | 
| 209 | 
            +
                b.obj = [1,2,3]
         | 
| 210 | 
            +
                assert_equal([1,2,3], Marshal.load(Marshal.dump(b)).obj)
         | 
| 211 | 
            +
              end
         | 
| 212 | 
            +
              
         | 
| 213 | 
            +
              def test_marshal
         | 
| 214 | 
            +
                b = Base.new
         | 
| 215 | 
            +
                b.obj = [1, {:foo => "foo"}, "bar"]
         | 
| 216 | 
            +
                b.instance_eval {@z=3}
         | 
| 217 | 
            +
                bb = Marshal.load(Marshal.dump(b))
         | 
| 218 | 
            +
                assert_equal(bb.obj, b.obj)
         | 
| 219 | 
            +
                assert_equal(bb.instance_eval{@z}, b.instance_eval{@z})
         | 
| 220 | 
            +
              end
         | 
| 221 | 
            +
             | 
| 222 | 
            +
              def test_nonpersistence
         | 
| 223 | 
            +
                b = Base.new
         | 
| 224 | 
            +
                assert_equal(nil, b.np)
         | 
| 225 | 
            +
                b.np = [4,5,6]
         | 
| 226 | 
            +
                assert_equal([4,5,6], b.np)
         | 
| 227 | 
            +
                bb = Marshal.load(Marshal.dump(b))
         | 
| 228 | 
            +
                assert_equal(nil, bb.np)
         | 
| 229 | 
            +
              end
         | 
| 230 | 
            +
             | 
| 231 | 
            +
              def test_protect
         | 
| 232 | 
            +
                a = Base.new
         | 
| 233 | 
            +
                b = Sub_4.new
         | 
| 234 | 
            +
                assert_nothing_raised {a.x; a.y = 2}
         | 
| 235 | 
            +
                assert_raises(METHOD_MISSING_ERROR) {
         | 
| 236 | 
            +
                  b.x
         | 
| 237 | 
            +
                }
         | 
| 238 | 
            +
                assert_raises(METHOD_MISSING_ERROR) {
         | 
| 239 | 
            +
                  b.y = 2
         | 
| 240 | 
            +
                }
         | 
| 241 | 
            +
              end
         | 
| 242 | 
            +
             | 
| 243 | 
            +
              def test_reflection
         | 
| 244 | 
            +
                names = Sub_1.shadow_attrs.collect { |attr| attr.var.to_s }.sort
         | 
| 245 | 
            +
                assert_equal(['np', 'obj', 'x', 'y', 'z'], names)
         | 
| 246 | 
            +
              end
         | 
| 247 | 
            +
             | 
| 248 | 
            +
            end
         | 
| 249 | 
            +
             | 
| 250 | 
            +
            class OtherBaseTestCase < Test::Unit::TestCase
         | 
| 251 | 
            +
             | 
| 252 | 
            +
              def test_sharing_library
         | 
| 253 | 
            +
                ob = OtherBase.new
         | 
| 254 | 
            +
                ob.str = "fred"
         | 
| 255 | 
            +
                assert_equal("fred", ob.str)
         | 
| 256 | 
            +
             | 
| 257 | 
            +
                ob = OtherFile.new
         | 
| 258 | 
            +
                ob.x = 1.2
         | 
| 259 | 
            +
                assert_equal(1.2, ob.x)      
         | 
| 260 | 
            +
              end
         | 
| 261 | 
            +
             | 
| 262 | 
            +
            end
         | 
| 263 | 
            +
             | 
| 264 | 
            +
            begin
         | 
| 265 | 
            +
              require 'yaml'
         | 
| 266 | 
            +
              module Kernel
         | 
| 267 | 
            +
                undef :y # else conflict with checking :y is undefined above
         | 
| 268 | 
            +
              end
         | 
| 269 | 
            +
              CShadow.allow_yaml
         | 
| 270 | 
            +
            rescue Exception => e
         | 
| 271 | 
            +
              $stderr.puts "Could not load yaml : #{e.inspect}"
         | 
| 272 | 
            +
            else
         | 
| 273 | 
            +
             | 
| 274 | 
            +
              class YamlTest < Test::Unit::TestCase
         | 
| 275 | 
            +
             | 
| 276 | 
            +
                def test_yaml
         | 
| 277 | 
            +
                  base = Base.new
         | 
| 278 | 
            +
                  base.obj = [1,2,3]
         | 
| 279 | 
            +
                  base.np = "456"
         | 
| 280 | 
            +
             | 
| 281 | 
            +
                  base2 = YAML.load(YAML.dump(base))
         | 
| 282 | 
            +
                  
         | 
| 283 | 
            +
                  assert_equal(base.obj, base2.obj)
         | 
| 284 | 
            +
                  assert_equal(nil, base2.np)
         | 
| 285 | 
            +
                end
         | 
| 286 | 
            +
             | 
| 287 | 
            +
              end
         | 
| 288 | 
            +
             | 
| 289 | 
            +
            end
         | 
    
        data/test/test.rb
    ADDED
    
    | @@ -0,0 +1,17 @@ | |
| 1 | 
            +
            #!/usr/bin/env ruby
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            def run(x)
         | 
| 4 | 
            +
              puts "-"*x.size
         | 
| 5 | 
            +
              puts x
         | 
| 6 | 
            +
              system(x)
         | 
| 7 | 
            +
            #  unless system(x)
         | 
| 8 | 
            +
            #    puts " ... failed: #{$?}"
         | 
| 9 | 
            +
            #  end
         | 
| 10 | 
            +
            end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            require 'rbconfig'
         | 
| 13 | 
            +
            ruby = Config::CONFIG["RUBY_INSTALL_NAME"]
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            run "#{ruby} test-cgen.rb"
         | 
| 16 | 
            +
            run "#{ruby} test-cshadow.rb"
         | 
| 17 | 
            +
            run "#{ruby} test-attribute.rb"
         | 
    
        metadata
    ADDED
    
    | @@ -0,0 +1,123 @@ | |
| 1 | 
            +
            --- !ruby/object:Gem::Specification 
         | 
| 2 | 
            +
            name: cgen
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            +
              version: 0.16.0
         | 
| 5 | 
            +
            platform: ruby
         | 
| 6 | 
            +
            authors: 
         | 
| 7 | 
            +
            - Joel VanderWerf
         | 
| 8 | 
            +
            autorequire: 
         | 
| 9 | 
            +
            bindir: bin
         | 
| 10 | 
            +
            cert_chain: []
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            date: 2009-07-26 00:00:00 -07:00
         | 
| 13 | 
            +
            default_executable: 
         | 
| 14 | 
            +
            dependencies: 
         | 
| 15 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 16 | 
            +
              name: bones
         | 
| 17 | 
            +
              type: :development
         | 
| 18 | 
            +
              version_requirement: 
         | 
| 19 | 
            +
              version_requirements: !ruby/object:Gem::Requirement 
         | 
| 20 | 
            +
                requirements: 
         | 
| 21 | 
            +
                - - ">="
         | 
| 22 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 23 | 
            +
                    version: 2.5.1
         | 
| 24 | 
            +
                version: 
         | 
| 25 | 
            +
            description: |
         | 
| 26 | 
            +
              Framework for dynamically generating and loading C extensions from Ruby
         | 
| 27 | 
            +
              programs. Includes CShadow module for defining classes in terms of C structs
         | 
| 28 | 
            +
              with accessors and inheritance.
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            email: vjoel@users.sourceforge.net
         | 
| 31 | 
            +
            executables: []
         | 
| 32 | 
            +
             | 
| 33 | 
            +
            extensions: []
         | 
| 34 | 
            +
             | 
| 35 | 
            +
            extra_rdoc_files: 
         | 
| 36 | 
            +
            - History.txt
         | 
| 37 | 
            +
            - README.txt
         | 
| 38 | 
            +
            - examples/inherit-example.txt
         | 
| 39 | 
            +
            files: 
         | 
| 40 | 
            +
            - .gitignore
         | 
| 41 | 
            +
            - History.txt
         | 
| 42 | 
            +
            - README.txt
         | 
| 43 | 
            +
            - examples/bench.rb
         | 
| 44 | 
            +
            - examples/complex.rb
         | 
| 45 | 
            +
            - examples/complex2.rb
         | 
| 46 | 
            +
            - examples/cshadow-example.rb
         | 
| 47 | 
            +
            - examples/cshadow-point.rb
         | 
| 48 | 
            +
            - examples/ctest.rb
         | 
| 49 | 
            +
            - examples/ctest2.rb
         | 
| 50 | 
            +
            - examples/ctest3.rb
         | 
| 51 | 
            +
            - examples/ctest4.rb
         | 
| 52 | 
            +
            - examples/ctest5.rb
         | 
| 53 | 
            +
            - examples/example-ruby-talk-30April2004.rb
         | 
| 54 | 
            +
            - examples/fixed-array.rb
         | 
| 55 | 
            +
            - examples/inherit-example.rb
         | 
| 56 | 
            +
            - examples/inherit-example.txt
         | 
| 57 | 
            +
            - examples/instance-eval.rb
         | 
| 58 | 
            +
            - examples/ivset.rb
         | 
| 59 | 
            +
            - examples/marshal-test.rb
         | 
| 60 | 
            +
            - examples/matrix.rb
         | 
| 61 | 
            +
            - examples/modular-def.rb
         | 
| 62 | 
            +
            - examples/objattr.rb
         | 
| 63 | 
            +
            - examples/opaque-struct-test.rb
         | 
| 64 | 
            +
            - examples/sample.rb
         | 
| 65 | 
            +
            - examples/struct.rb
         | 
| 66 | 
            +
            - examples/test.rb
         | 
| 67 | 
            +
            - examples/yaml.rb
         | 
| 68 | 
            +
            - install.rb
         | 
| 69 | 
            +
            - lib/cgen/attribute.rb
         | 
| 70 | 
            +
            - lib/cgen/cgen.rb
         | 
| 71 | 
            +
            - lib/cgen/cshadow.rb
         | 
| 72 | 
            +
            - lib/cgen/inherit.rb
         | 
| 73 | 
            +
            - rakefile
         | 
| 74 | 
            +
            - tasks/ann.rake
         | 
| 75 | 
            +
            - tasks/bones.rake
         | 
| 76 | 
            +
            - tasks/gem.rake
         | 
| 77 | 
            +
            - tasks/git.rake
         | 
| 78 | 
            +
            - tasks/notes.rake
         | 
| 79 | 
            +
            - tasks/post_load.rake
         | 
| 80 | 
            +
            - tasks/rdoc.rake
         | 
| 81 | 
            +
            - tasks/rubyforge.rake
         | 
| 82 | 
            +
            - tasks/setup.rb
         | 
| 83 | 
            +
            - tasks/spec.rake
         | 
| 84 | 
            +
            - tasks/svn.rake
         | 
| 85 | 
            +
            - tasks/test.rake
         | 
| 86 | 
            +
            - tasks/zentest.rake
         | 
| 87 | 
            +
            - test/test-attribute.rb
         | 
| 88 | 
            +
            - test/test-cgen.rb
         | 
| 89 | 
            +
            - test/test-cshadow.rb
         | 
| 90 | 
            +
            - test/test.rb
         | 
| 91 | 
            +
            has_rdoc: true
         | 
| 92 | 
            +
            homepage: http://rubyforge.org/projects/cgen/
         | 
| 93 | 
            +
            licenses: []
         | 
| 94 | 
            +
             | 
| 95 | 
            +
            post_install_message: 
         | 
| 96 | 
            +
            rdoc_options: 
         | 
| 97 | 
            +
            - --main
         | 
| 98 | 
            +
            - README.txt
         | 
| 99 | 
            +
            require_paths: 
         | 
| 100 | 
            +
            - lib
         | 
| 101 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement 
         | 
| 102 | 
            +
              requirements: 
         | 
| 103 | 
            +
              - - ">="
         | 
| 104 | 
            +
                - !ruby/object:Gem::Version 
         | 
| 105 | 
            +
                  version: "0"
         | 
| 106 | 
            +
              version: 
         | 
| 107 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement 
         | 
| 108 | 
            +
              requirements: 
         | 
| 109 | 
            +
              - - ">="
         | 
| 110 | 
            +
                - !ruby/object:Gem::Version 
         | 
| 111 | 
            +
                  version: "0"
         | 
| 112 | 
            +
              version: 
         | 
| 113 | 
            +
            requirements: []
         | 
| 114 | 
            +
             | 
| 115 | 
            +
            rubyforge_project: cgen
         | 
| 116 | 
            +
            rubygems_version: 1.3.5
         | 
| 117 | 
            +
            signing_key: 
         | 
| 118 | 
            +
            specification_version: 3
         | 
| 119 | 
            +
            summary: Library for packed binary data stored in ruby Strings
         | 
| 120 | 
            +
            test_files: 
         | 
| 121 | 
            +
            - test/test-attribute.rb
         | 
| 122 | 
            +
            - test/test-cgen.rb
         | 
| 123 | 
            +
            - test/test-cshadow.rb
         |