carray 1.5.1 → 1.5.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (198) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +32 -0
  3. data/{LICENSES → LICENSE} +0 -0
  4. data/NEWS.md +83 -0
  5. data/README.md +34 -18
  6. data/Rakefile +1 -1
  7. data/TODO.md +17 -0
  8. data/carray.gemspec +10 -7
  9. data/ext/ca_iter_block.c +3 -5
  10. data/ext/ca_iter_dimension.c +4 -5
  11. data/ext/ca_iter_window.c +2 -4
  12. data/ext/ca_obj_array.c +394 -124
  13. data/ext/ca_obj_bitarray.c +6 -11
  14. data/ext/ca_obj_bitfield.c +5 -9
  15. data/ext/ca_obj_block.c +5 -12
  16. data/ext/ca_obj_fake.c +3 -5
  17. data/ext/ca_obj_farray.c +3 -5
  18. data/ext/ca_obj_field.c +15 -17
  19. data/ext/ca_obj_grid.c +5 -6
  20. data/ext/ca_obj_mapping.c +2 -4
  21. data/ext/ca_obj_object.c +3 -5
  22. data/ext/ca_obj_reduce.c +2 -4
  23. data/ext/ca_obj_refer.c +11 -15
  24. data/ext/ca_obj_repeat.c +2 -4
  25. data/ext/ca_obj_select.c +2 -4
  26. data/ext/ca_obj_shift.c +3 -5
  27. data/ext/ca_obj_transpose.c +3 -5
  28. data/ext/ca_obj_unbound_repeat.c +68 -122
  29. data/ext/ca_obj_window.c +7 -9
  30. data/ext/carray.h +17 -8
  31. data/ext/carray_access.c +183 -58
  32. data/ext/carray_attribute.c +151 -197
  33. data/ext/carray_call_cfunc.c +1 -3
  34. data/ext/carray_cast.c +345 -144
  35. data/ext/carray_cast_func.rb +1 -2
  36. data/ext/carray_class.c +28 -36
  37. data/ext/carray_conversion.c +56 -59
  38. data/ext/carray_copy.c +16 -32
  39. data/ext/carray_core.c +73 -60
  40. data/ext/carray_element.c +25 -44
  41. data/ext/carray_generate.c +74 -53
  42. data/ext/carray_iterator.c +13 -15
  43. data/ext/carray_loop.c +53 -82
  44. data/ext/carray_mask.c +99 -119
  45. data/ext/carray_math.rb +28 -12
  46. data/ext/carray_mathfunc.c +1 -3
  47. data/ext/carray_numeric.c +42 -45
  48. data/ext/carray_operator.c +45 -32
  49. data/ext/carray_order.c +231 -65
  50. data/ext/carray_sort_addr.c +14 -21
  51. data/ext/carray_stat.c +1 -3
  52. data/ext/carray_stat_proc.rb +2 -4
  53. data/ext/carray_test.c +41 -30
  54. data/ext/carray_undef.c +1 -11
  55. data/ext/carray_utils.c +138 -51
  56. data/ext/extconf.rb +14 -2
  57. data/ext/mkmath.rb +2 -2
  58. data/ext/ruby_carray.c +15 -7
  59. data/ext/ruby_ccomplex.c +2 -4
  60. data/ext/ruby_float_func.c +1 -3
  61. data/ext/version.h +5 -7
  62. data/lib/carray.rb +9 -9
  63. data/lib/carray/autoload.rb +0 -2
  64. data/lib/carray/autoload/autoload_gem_numo_narray.rb +6 -6
  65. data/lib/carray/basic.rb +1 -3
  66. data/lib/carray/broadcast.rb +101 -0
  67. data/lib/carray/compose.rb +34 -10
  68. data/lib/carray/construct.rb +57 -18
  69. data/lib/carray/info.rb +1 -3
  70. data/lib/carray/inspect.rb +3 -5
  71. data/lib/carray/io/imagemagick.rb +1 -3
  72. data/lib/carray/iterator.rb +3 -3
  73. data/lib/carray/mask.rb +18 -7
  74. data/lib/carray/math.rb +4 -6
  75. data/lib/carray/math/histogram.rb +1 -3
  76. data/lib/carray/math/recurrence.rb +1 -3
  77. data/lib/carray/mkmf.rb +1 -3
  78. data/lib/carray/object/ca_obj_iterator.rb +1 -3
  79. data/lib/carray/object/ca_obj_link.rb +1 -3
  80. data/lib/carray/object/ca_obj_pack.rb +1 -3
  81. data/lib/carray/obsolete.rb +1 -17
  82. data/lib/carray/ordering.rb +29 -5
  83. data/lib/carray/serialize.rb +34 -25
  84. data/lib/carray/string.rb +1 -3
  85. data/lib/carray/struct.rb +3 -5
  86. data/lib/carray/testing.rb +5 -10
  87. data/lib/carray/time.rb +1 -3
  88. data/lib/carray/transform.rb +12 -3
  89. data/misc/NOTE +16 -38
  90. data/spec/Classes/CABitfield_spec.rb +58 -0
  91. data/spec/Classes/CABlockIterator_spec.rb +114 -0
  92. data/spec/Classes/CABlock_spec.rb +205 -0
  93. data/spec/Classes/CAField_spec.rb +39 -0
  94. data/spec/Classes/CAGrid_spec.rb +75 -0
  95. data/spec/Classes/CAMap_spec.rb +0 -0
  96. data/{test/test_CAMapping.rb → spec/Classes/CAMapping_spec.rb} +35 -36
  97. data/spec/Classes/CAObject_attribute_spec.rb +33 -0
  98. data/spec/Classes/CAObject_spec.rb +33 -0
  99. data/spec/Classes/CARefer_spec.rb +93 -0
  100. data/spec/Classes/CARepeat_spec.rb +65 -0
  101. data/spec/Classes/CASelect_spec.rb +22 -0
  102. data/spec/Classes/CAShift_spec.rb +16 -0
  103. data/spec/Classes/CAStruct_spec.rb +71 -0
  104. data/{test/test_CATranspose.rb → spec/Classes/CATranspose_spec.rb} +20 -21
  105. data/spec/Classes/CAUnboudRepeat_spec.rb +102 -0
  106. data/spec/Classes/CAWindow_spec.rb +54 -0
  107. data/spec/Classes/CAWrap_spec.rb +8 -0
  108. data/{test/test_CArray.rb → spec/Classes/CArray_spec.rb} +48 -92
  109. data/spec/Classes/CScalar_spec.rb +55 -0
  110. data/spec/Features/feature_130_spec.rb +19 -0
  111. data/spec/Features/feature_attributes_spec.rb +280 -0
  112. data/spec/Features/feature_boolean_spec.rb +98 -0
  113. data/spec/Features/feature_broadcast.rb +116 -0
  114. data/spec/Features/feature_cast_function.rb +19 -0
  115. data/spec/Features/feature_cast_spec.rb +33 -0
  116. data/spec/Features/feature_class_spec.rb +84 -0
  117. data/spec/Features/feature_complex_spec.rb +42 -0
  118. data/{test/test_composite.rb → spec/Features/feature_composite_spec.rb} +17 -18
  119. data/spec/Features/feature_convert_spec.rb +46 -0
  120. data/spec/Features/feature_copy_spec.rb +123 -0
  121. data/spec/Features/feature_creation_spec.rb +84 -0
  122. data/spec/Features/feature_element_spec.rb +144 -0
  123. data/spec/Features/feature_extream_spec.rb +54 -0
  124. data/spec/Features/feature_generate_spec.rb +74 -0
  125. data/spec/Features/feature_index_spec.rb +69 -0
  126. data/spec/Features/feature_mask_spec.rb +580 -0
  127. data/spec/Features/feature_math_spec.rb +97 -0
  128. data/spec/Features/feature_order_spec.rb +146 -0
  129. data/spec/Features/feature_ref_store_spec.rb +209 -0
  130. data/spec/Features/feature_serialization_spec.rb +125 -0
  131. data/spec/Features/feature_stat_spec.rb +397 -0
  132. data/spec/Features/feature_virtual_spec.rb +48 -0
  133. data/spec/Features/method_eq_spec.rb +81 -0
  134. data/spec/Features/method_is_nan_spec.rb +12 -0
  135. data/spec/Features/method_map_spec.rb +54 -0
  136. data/spec/Features/method_max_with.rb +20 -0
  137. data/spec/Features/method_min_with.rb +19 -0
  138. data/spec/Features/method_ne_spec.rb +18 -0
  139. data/spec/Features/method_project_spec.rb +188 -0
  140. data/spec/Features/method_ref_spec.rb +27 -0
  141. data/spec/Features/method_round_spec.rb +11 -0
  142. data/spec/Features/method_s_linspace_spec.rb +48 -0
  143. data/spec/Features/method_s_span_spec.rb +14 -0
  144. data/spec/Features/method_seq_spec.rb +47 -0
  145. data/spec/Features/method_sort_with.rb +43 -0
  146. data/spec/Features/method_sorted_with.rb +29 -0
  147. data/spec/Features/method_span_spec.rb +42 -0
  148. data/spec/Features/method_wrap_readonly_spec.rb +43 -0
  149. data/{test → spec/UnitTest}/test_CAVirtual.rb +0 -0
  150. data/spec/spec_all.rb +0 -1
  151. data/utils/convert_test.rb +73 -0
  152. data/utils/{extract_rdoc.rb → extract_yard.rb} +7 -12
  153. metadata +74 -58
  154. data/spec/CABlockIterator/CABlockIterator_spec.rb +0 -113
  155. data/spec/CArray/bug/store_spec.rb +0 -27
  156. data/spec/CArray/index/repeat_spec.rb +0 -10
  157. data/spec/CArray/method/eq_spec.rb +0 -80
  158. data/spec/CArray/method/is_nan_spec.rb +0 -12
  159. data/spec/CArray/method/ne_spec.rb +0 -18
  160. data/spec/CArray/method/round_spec.rb +0 -11
  161. data/spec/CArray/object/_attribute_spec.rb +0 -32
  162. data/spec/CArray/object/s_new_spec.rb +0 -31
  163. data/spec/CArray/serialize/Serialization_spec.rb +0 -89
  164. data/test/test_130.rb +0 -23
  165. data/test/test_ALL.rb +0 -49
  166. data/test/test_CABitfield.rb +0 -59
  167. data/test/test_CABlock.rb +0 -208
  168. data/test/test_CAField.rb +0 -40
  169. data/test/test_CAGrid.rb +0 -76
  170. data/test/test_CAMmap.rb +0 -11
  171. data/test/test_CARefer.rb +0 -94
  172. data/test/test_CARepeat.rb +0 -66
  173. data/test/test_CASelect.rb +0 -23
  174. data/test/test_CAShift.rb +0 -17
  175. data/test/test_CAWindow.rb +0 -55
  176. data/test/test_CAWrap.rb +0 -9
  177. data/test/test_CComplex.rb +0 -83
  178. data/test/test_CScalar.rb +0 -91
  179. data/test/test_attribute.rb +0 -281
  180. data/test/test_block_iterator.rb +0 -17
  181. data/test/test_boolean.rb +0 -99
  182. data/test/test_cast.rb +0 -33
  183. data/test/test_class.rb +0 -85
  184. data/test/test_complex.rb +0 -43
  185. data/test/test_convert.rb +0 -79
  186. data/test/test_copy.rb +0 -141
  187. data/test/test_creation.rb +0 -85
  188. data/test/test_element.rb +0 -146
  189. data/test/test_extream.rb +0 -55
  190. data/test/test_generate.rb +0 -75
  191. data/test/test_index.rb +0 -71
  192. data/test/test_mask.rb +0 -578
  193. data/test/test_math.rb +0 -98
  194. data/test/test_order.rb +0 -147
  195. data/test/test_ref_store.rb +0 -211
  196. data/test/test_stat.rb +0 -406
  197. data/test/test_struct.rb +0 -72
  198. data/test/test_virtual.rb +0 -49
@@ -3,10 +3,8 @@
3
3
  # carray/serialize.rb
4
4
  #
5
5
  # This file is part of Ruby/CArray extension library.
6
- # You can redistribute it and/or modify it under the terms of
7
- # the Ruby Licence.
8
6
  #
9
- # Copyright (C) 2005 Hiroki Motoyoshi
7
+ # Copyright (C) 2005-2020 Hiroki Motoyoshi
10
8
  #
11
9
  # ----------------------------------------------------------------------------
12
10
  #
@@ -41,8 +39,10 @@
41
39
  # has_attribute : int32
42
40
  #
43
41
  # offset 256 bytes
44
- # data : bytes*elements : value data
45
- # mask : int8*elements : mask data if has_mask == 1
42
+ # data : bytes*elements : value data
43
+ # mask : int8*elements : mask data if has_mask == 1
44
+ # attribute : object marshal : attribute
45
+ # data_class_name : string marshal : data_class_name
46
46
 
47
47
  require "stringio"
48
48
 
@@ -59,6 +59,7 @@ class CArray::Serializer # :nodoc:
59
59
  int32 :has_mask
60
60
  array :dim, :type => CArray.int64(CA_RANK_MAX)
61
61
  int32 :has_attr
62
+ int32 :has_data_class
62
63
  }
63
64
 
64
65
  Header_Legacy = CA.struct(:pack=>1, :size=>256) {
@@ -83,7 +84,7 @@ class CArray::Serializer # :nodoc:
83
84
  end
84
85
  end
85
86
 
86
- def save (ca, opt = {})
87
+ def save (ca, **opt)
87
88
  endian = opt[:endian] || CArray.endian
88
89
  # ---
89
90
  header = Header.new()
@@ -95,15 +96,16 @@ class CArray::Serializer # :nodoc:
95
96
  header[:ndim] = ca.ndim
96
97
  header[:elements] = ca.elements
97
98
  header[:has_mask] = ca.has_mask? ? 1 : 0
99
+ header[:has_data_class] = ca.has_data_class? ? 1 : 0
98
100
  header[:dim][[0,ca.ndim]] = ca.dim
99
- attr = nil
101
+ attributes = nil
100
102
  if ca.attribute
101
- attr = ca.attribute.clone
103
+ attributes = ca.attribute.clone
102
104
  end
103
105
  if opt[:attribute]
104
- (attr ||= {}).update(opt[:attribute])
106
+ (attributes ||= {}).update(opt[:attribute])
105
107
  end
106
- header[:has_attr] = attr.empty? ? 0 : 1
108
+ header[:has_attr] = attributes.empty? ? 0 : 1
107
109
  unless CArray.endian == endian
108
110
  header.swap_bytes!
109
111
  end
@@ -121,14 +123,17 @@ class CArray::Serializer # :nodoc:
121
123
  if ca.has_mask?
122
124
  ca.mask.dump_binary(@io)
123
125
  end
124
- if attr
125
- Marshal.dump(attr, @io)
126
+ if attributes
127
+ Marshal.dump(attributes, @io)
128
+ end
129
+ if ca.has_data_class?
130
+ Marshal.dump(ca.data_class.to_s, @io)
126
131
  end
127
132
  return ca
128
133
  end
129
134
 
130
- def load (opt = {}, legacy: false)
131
- if legacy
135
+ def load (**opt)
136
+ if opt[:legacy]
132
137
  header = Header_Legacy.decode(@io.read(256))
133
138
  else
134
139
  header = Header.decode(@io.read(256))
@@ -151,7 +156,8 @@ class CArray::Serializer # :nodoc:
151
156
  elements = header[:elements]
152
157
  has_mask = header[:has_mask] != 0 ? true : false
153
158
  dim = header[:dim][[0, ndim]].to_a
154
- has_attr = header[:has_attr]
159
+ has_attr = header[:has_attr] != 0 ? true : false
160
+ has_data_class = header[:has_data_class] != 0 ? true : false
155
161
  if data_type == 255
156
162
  data_type = header[:data_type_name].strip.to_sym
157
163
  end
@@ -172,9 +178,12 @@ class CArray::Serializer # :nodoc:
172
178
  ca.mask = 0
173
179
  ca.mask.load_binary(@io)
174
180
  end
175
- if has_attr == 1
181
+ if has_attr
176
182
  ca.attribute = Marshal.load(@io)
177
183
  end
184
+ if has_data_class
185
+ ca.data_class = Kernel.const_get(Marshal.load(@io))
186
+ end
178
187
  return ca
179
188
  end
180
189
 
@@ -182,36 +191,36 @@ end
182
191
 
183
192
  class CArray
184
193
 
185
- def self.save(ca, output, opt={})
194
+ def self.save(ca, output, **opt)
186
195
  case output
187
196
  when String
188
197
  open(output, "wb:ASCII-8BIT") { |io|
189
- return Serializer.new(io).save(ca, opt)
198
+ return Serializer.new(io).save(ca, **opt)
190
199
  }
191
200
  else
192
- return Serializer.new(output).save(ca, opt)
201
+ return Serializer.new(output).save(ca, **opt)
193
202
  end
194
203
  end
195
204
 
196
- def self.load (input, opt={})
205
+ def self.load (input, **opt)
197
206
  case input
198
207
  when String
199
208
  if input.length >= 256 and input =~ /\A_CARRAY_.{8}_(LE|BE)_/
200
209
  io = StringIO.new(input)
201
- return Serializer.new(io).load(opt)
210
+ return Serializer.new(io).load(**opt)
202
211
  else
203
212
  open(input, "rb:ASCII-8BIT") { |io|
204
- return Serializer.new(io).load(opt)
213
+ return Serializer.new(io).load(**opt)
205
214
  }
206
215
  end
207
216
  else
208
- return Serializer.new(input).load(opt)
217
+ return Serializer.new(input).load(**opt)
209
218
  end
210
219
  end
211
220
 
212
- def self.dump (ca, opt={})
221
+ def self.dump (ca, **opt)
213
222
  io = StringIO.new("")
214
- Serializer.new(io).save(ca, opt)
223
+ Serializer.new(io).save(ca, **opt)
215
224
  return io.string
216
225
  end
217
226
 
data/lib/carray/string.rb CHANGED
@@ -3,10 +3,8 @@
3
3
  # carray/string.rb
4
4
  #
5
5
  # This file is part of Ruby/CArray extension library.
6
- # You can redistribute it and/or modify it under the terms of
7
- # the Ruby Licence.
8
6
  #
9
- # Copyright (C) 2005 Hiroki Motoyoshi
7
+ # Copyright (C) 2005-2020 Hiroki Motoyoshi
10
8
  #
11
9
  # ----------------------------------------------------------------------------
12
10
 
data/lib/carray/struct.rb CHANGED
@@ -3,19 +3,17 @@
3
3
  # carray/struct.rb
4
4
  #
5
5
  # This file is part of Ruby/CArray extension library.
6
- # You can redistribute it and/or modify it under the terms of
7
- # the Ruby Licence.
8
6
  #
9
- # Copyright (C) 2005 Hiroki Motoyoshi
7
+ # Copyright (C) 2005-2020 Hiroki Motoyoshi
10
8
  #
11
9
  # ----------------------------------------------------------------------------
12
10
  #
13
11
  # The data class for fixed length carray are required to satisfy only
14
- # four conditions.
12
+ # five conditions.
15
13
  #
16
14
  # * constant data_class::DATA_SIZE -> integer
17
- # * constant data_class::MEMBERS -> array of string
18
15
  # * constant data_class::MEMBER_TABLE -> hash
16
+ # * constant data_class::MEMBERS -> array (MEMBER_TABLE.keys as usual)
19
17
  # * method data_class.decode(data) -> new data_class object
20
18
  # * method data_class#encode() -> string
21
19
  #
@@ -3,10 +3,8 @@
3
3
  # carray/test.rb
4
4
  #
5
5
  # This file is part of Ruby/CArray extension library.
6
- # You can redistribute it and/or modify it under the terms of
7
- # the Ruby Licence.
8
6
  #
9
- # Copyright (C) 2005 Hiroki Motoyoshi
7
+ # Copyright (C) 2005-2020 Hiroki Motoyoshi
10
8
  #
11
9
  # ----------------------------------------------------------------------------
12
10
 
@@ -41,16 +39,13 @@ class CArray
41
39
 
42
40
  # Returns the array eliminated all the duplicated elements.
43
41
  def uniq
44
- ary = to_a.uniq
42
+ ary = flatten.to_a.uniq
45
43
  if has_mask?
46
44
  ary.delete(UNDEF)
47
45
  end
48
- if has_data_class?
49
- return CArray.new(data_class, [ary.length]) { ary }
50
- else
51
- return CArray.new(data_type, [ary.length], :bytes=>bytes) { ary }
52
- end
46
+ out = CArray.new(data_type, [ary.length], :bytes=>bytes) { ary }
47
+ out.data_class = data_class if has_data_class?
48
+ return out
53
49
  end
54
50
 
55
-
56
51
  end
data/lib/carray/time.rb CHANGED
@@ -3,10 +3,8 @@
3
3
  # carray/time.rb
4
4
  #
5
5
  # This file is part of Ruby/CArray extension library.
6
- # You can redistribute it and/or modify it under the terms of
7
- # the Ruby Licence.
8
6
  #
9
- # Copyright (C) 2005 Hiroki Motoyoshi
7
+ # Copyright (C) 2005-2020 Hiroki Motoyoshi
10
8
  #
11
9
  # ----------------------------------------------------------------------------
12
10
 
@@ -3,10 +3,8 @@
3
3
  # carray/composition.rb
4
4
  #
5
5
  # This file is part of Ruby/CArray extension library.
6
- # You can redistribute it and/or modify it under the terms of
7
- # the Ruby Licence.
8
6
  #
9
- # Copyright (C) 2005 Hiroki Motoyoshi
7
+ # Copyright (C) 2005-2020 Hiroki Motoyoshi
10
8
  #
11
9
  # ----------------------------------------------------------------------------
12
10
 
@@ -96,5 +94,16 @@ class CArray
96
94
  return self[:%,1]
97
95
  end
98
96
 
97
+ # pulled
98
+
99
+ def pulled (*args)
100
+ idx = args.map{|s| s.nil? ? :% : s}
101
+ return self[*idx]
102
+ end
99
103
 
104
+ def pull (*args)
105
+ idx = args.map{|s| s.nil? ? :% : s}
106
+ return self[*idx].to_ca
107
+ end
108
+
100
109
  end
data/misc/NOTE CHANGED
@@ -1,42 +1,6 @@
1
1
  Note for developper
2
2
  ===================
3
3
 
4
- Make targets
5
- ------------
6
-
7
- ### create Makefile
8
-
9
- ruby extconf.rb
10
-
11
- ### build extensions
12
-
13
- make all
14
-
15
- ### install via RubyGems
16
-
17
- make build-gem
18
- make install-gem
19
- make uninstall-gem ### for uninstall this version
20
-
21
- ### install via extconf.rb
22
-
23
- ruby extconf.rb
24
- make all
25
- make install
26
-
27
- ### cleaning temporary files
28
-
29
- make clean
30
- make distclean
31
-
32
- ### create gem package
33
-
34
- make package ### -> rake package
35
-
36
- ### run test
37
-
38
- make test ### -> rake test
39
-
40
4
  Utility scripts
41
5
  ---------------
42
6
 
@@ -53,8 +17,11 @@ Check Points for Debug
53
17
 
54
18
  * 'elements' should be checked with double float number
55
19
 
56
- * ca_update_mask/ca_attach/ca_create_mask/ca_has_mask should be called
57
- before ca->mask refered
20
+ * One of the following methods should be called before ca->mask refered
21
+ + ca_attach
22
+ + ca_has_mask
23
+ + ca_update_mask
24
+ + ca_create_mask
58
25
 
59
26
  * Avoid the exposition of raw VALUE data in object array
60
27
 
@@ -71,3 +38,14 @@ OpenMP
71
38
  ------
72
39
 
73
40
  * '--with-cc="gcc -fopenmp"' ... and so on.
41
+
42
+ Range
43
+ -----
44
+
45
+ int rb_arithmetic_sequence_extract(VALUE, VALUE *, VALUE *, VALUE *, int *);
46
+
47
+ /* range.c */
48
+ #define RANGE_BEG(r) (RSTRUCT(r)->as.ary[0])
49
+ #define RANGE_END(r) (RSTRUCT(r)->as.ary[1])
50
+ #define RANGE_EXCL(r) (RSTRUCT(r)->as.ary[2])
51
+
@@ -0,0 +1,58 @@
1
+
2
+ require 'carray'
3
+ require "rspec-power_assert"
4
+
5
+ describe "TestCArrayCABitfield " do
6
+
7
+ example "virtual_array" do
8
+ a = CArray.int(3,3) { 1 }
9
+ b = a.bitfield(0)
10
+ r = b.parent
11
+ is_asserted_by { b.class == CABitfield }
12
+ is_asserted_by { true == b.virtual? }
13
+ is_asserted_by { a == r }
14
+ end
15
+
16
+ example "basic_features" do
17
+ # ---
18
+ a = CArray.int(3,3)
19
+ b = a.bitfield(0)
20
+ b[] = 1
21
+ is_asserted_by { a.template { 1 } == a }
22
+ is_asserted_by { b.template { 1 } == b }
23
+ b[] = 0
24
+ is_asserted_by { a.template { 0 } == a }
25
+ is_asserted_by { b.template { 0 } == b }
26
+ # ---
27
+ a = CArray.int(3,3)
28
+ b = a.bitfield(0..1)
29
+ b[] = 3
30
+ is_asserted_by { a.template { 3 } == a }
31
+ is_asserted_by { b.template { 3 } == b }
32
+
33
+ # ---
34
+ a = CArray.int(3,3)
35
+ b = a.bitfield(5..6)
36
+ b[] = 3
37
+ is_asserted_by { a.template { 3 << 5 } == a }
38
+ is_asserted_by { b.template { 3 } == b }
39
+
40
+ # ---
41
+ a = CArray.int(3,3)
42
+ b = a.bitfield(27..28)
43
+ b[] = 3
44
+ is_asserted_by { a.template { 3 << 27 } == a }
45
+ is_asserted_by { b.template { 3 } == b }
46
+ end
47
+
48
+ example "out_of_index" do
49
+ # ---
50
+ a = CArray.int8(3)
51
+ expect { a.bitfield(-1..0) }.to raise_error(IndexError)
52
+ expect { a.bitfield(0..16) }.to raise_error(IndexError)
53
+ expect { a.bitfield([nil,2]) }.to raise_error(IndexError)
54
+ expect { a.bitfield([nil,1]) }.not_to raise_error()
55
+ end
56
+
57
+
58
+ end
@@ -0,0 +1,114 @@
1
+ require "carray"
2
+ require "rspec-power_assert"
3
+
4
+ describe CABlockIterator do
5
+
6
+ describe "each method" do
7
+
8
+ before do
9
+ @original = CArray.object(4,4).seq!
10
+ @it = @original.blocks(0..1, 0..1)
11
+ end
12
+
13
+ example "should call 4-times its block" do
14
+ count = 0
15
+ @it.each do |blk|
16
+ count += 1
17
+ end
18
+ is_asserted_by { count == 4 }
19
+ end
20
+
21
+ example "should have the block parameter of 2x2 CABlock object" do
22
+ @it.each do |blk|
23
+ is_asserted_by { blk.class == CABlock }
24
+ is_asserted_by { blk.data_type == CA_OBJECT }
25
+ is_asserted_by { blk.dim == [2,2] }
26
+ end
27
+ end
28
+
29
+ end
30
+
31
+ describe "reference method []" do
32
+
33
+ before do
34
+ @original = CArray.object(4,4).seq!
35
+ @it = @original.blocks(0..1, 0..1)
36
+ end
37
+
38
+ example "should return a 2x2 CABlock object" do
39
+ blk = @it[0]
40
+ is_asserted_by { blk.class == CABlock }
41
+ is_asserted_by { blk.data_type == CA_OBJECT }
42
+ is_asserted_by { blk == CA_OBJECT([[0,1],[4,5]]) }
43
+ blk = @it[1,0]
44
+ is_asserted_by { blk.class == CABlock }
45
+ is_asserted_by { blk.data_type == CA_OBJECT }
46
+ is_asserted_by { blk == CA_OBJECT([[8,9],[12,13]]) }
47
+ end
48
+
49
+ example "should return a 2x2 CABlock object" do
50
+ is_asserted_by { @it[0] == @it.kernel_at_addr(0, @it.reference) }
51
+ is_asserted_by { @it[1,0] == @it.kernel_at_index([1,0], @it.reference) }
52
+ end
53
+
54
+ end
55
+
56
+ describe "store method []=" do
57
+
58
+ before do
59
+ @original = CArray.object(4,4).seq!
60
+ @it = @original.blocks(0..1, 0..1)
61
+ end
62
+
63
+ example "should return a 2x2 CABlock object" do
64
+ @it[0] = 1
65
+ @it[1,0] = 2
66
+ is_asserted_by { @it.reference == CA_OBJECT( [ [ 1, 1, 2, 3 ],
67
+ [ 1, 1, 6, 7 ],
68
+ [ 2, 2, 10, 11 ],
69
+ [ 2, 2, 14, 15 ] ] ) }
70
+ end
71
+
72
+ end
73
+
74
+ describe "pick method" do
75
+
76
+ before do
77
+ @original = CArray.object(4,4).seq!
78
+ @it = @original.blocks(0..1, 0..1)
79
+ end
80
+
81
+ example "should return a 2x2 CABlock object" do
82
+ blk = @it.pick(0)
83
+ is_asserted_by { blk.class == CArray }
84
+ is_asserted_by { blk.data_type == CA_OBJECT }
85
+ is_asserted_by { blk == CA_OBJECT([[0,2],[8,10]]) }
86
+ blk = @it.pick(1,0)
87
+ is_asserted_by { blk.class == CArray }
88
+ is_asserted_by { blk.data_type == CA_OBJECT }
89
+ is_asserted_by { blk == CA_OBJECT([[4,6],[12,14]]) }
90
+ end
91
+
92
+ end
93
+
94
+ describe "put method" do
95
+
96
+ before do
97
+ @original = CArray.object(4,4).seq!
98
+ @it = @original.blocks(0..1, 0..1)
99
+ end
100
+
101
+ example "should store value via 2x2 CBlock object" do
102
+ @it.put(0,1)
103
+ @it.put(0,1,2)
104
+ is_asserted_by { @it.pick(0) == CA_OBJECT([[1,1],[1,1]]) }
105
+ is_asserted_by { @it.pick(0,1) == CA_OBJECT([[2,2],[2,2]]) }
106
+ is_asserted_by { @it.reference == CA_OBJECT([[ 1, 2, 1, 2 ],
107
+ [ 4, 5, 6, 7 ],
108
+ [ 1, 2, 1, 2 ],
109
+ [ 12, 13, 14, 15 ]]) }
110
+ end
111
+
112
+ end
113
+
114
+ end