carray 1.5.1 → 1.5.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.yardopts +32 -0
- data/{LICENSES → LICENSE} +0 -0
- data/NEWS.md +83 -0
- data/README.md +34 -18
- data/Rakefile +1 -1
- data/TODO.md +17 -0
- data/carray.gemspec +10 -7
- data/ext/ca_iter_block.c +3 -5
- data/ext/ca_iter_dimension.c +4 -5
- data/ext/ca_iter_window.c +2 -4
- data/ext/ca_obj_array.c +394 -124
- data/ext/ca_obj_bitarray.c +6 -11
- data/ext/ca_obj_bitfield.c +5 -9
- data/ext/ca_obj_block.c +5 -12
- data/ext/ca_obj_fake.c +3 -5
- data/ext/ca_obj_farray.c +3 -5
- data/ext/ca_obj_field.c +15 -17
- data/ext/ca_obj_grid.c +5 -6
- data/ext/ca_obj_mapping.c +2 -4
- data/ext/ca_obj_object.c +3 -5
- data/ext/ca_obj_reduce.c +2 -4
- data/ext/ca_obj_refer.c +11 -15
- data/ext/ca_obj_repeat.c +2 -4
- data/ext/ca_obj_select.c +2 -4
- data/ext/ca_obj_shift.c +3 -5
- data/ext/ca_obj_transpose.c +3 -5
- data/ext/ca_obj_unbound_repeat.c +68 -122
- data/ext/ca_obj_window.c +7 -9
- data/ext/carray.h +17 -8
- data/ext/carray_access.c +183 -58
- data/ext/carray_attribute.c +151 -197
- data/ext/carray_call_cfunc.c +1 -3
- data/ext/carray_cast.c +345 -144
- data/ext/carray_cast_func.rb +1 -2
- data/ext/carray_class.c +28 -36
- data/ext/carray_conversion.c +56 -59
- data/ext/carray_copy.c +16 -32
- data/ext/carray_core.c +73 -60
- data/ext/carray_element.c +25 -44
- data/ext/carray_generate.c +74 -53
- data/ext/carray_iterator.c +13 -15
- data/ext/carray_loop.c +53 -82
- data/ext/carray_mask.c +99 -119
- data/ext/carray_math.rb +28 -12
- data/ext/carray_mathfunc.c +1 -3
- data/ext/carray_numeric.c +42 -45
- data/ext/carray_operator.c +45 -32
- data/ext/carray_order.c +231 -65
- data/ext/carray_sort_addr.c +14 -21
- data/ext/carray_stat.c +1 -3
- data/ext/carray_stat_proc.rb +2 -4
- data/ext/carray_test.c +41 -30
- data/ext/carray_undef.c +1 -11
- data/ext/carray_utils.c +138 -51
- data/ext/extconf.rb +14 -2
- data/ext/mkmath.rb +2 -2
- data/ext/ruby_carray.c +15 -7
- data/ext/ruby_ccomplex.c +2 -4
- data/ext/ruby_float_func.c +1 -3
- data/ext/version.h +5 -7
- data/lib/carray.rb +9 -9
- data/lib/carray/autoload.rb +0 -2
- data/lib/carray/autoload/autoload_gem_numo_narray.rb +6 -6
- data/lib/carray/basic.rb +1 -3
- data/lib/carray/broadcast.rb +101 -0
- data/lib/carray/compose.rb +34 -10
- data/lib/carray/construct.rb +57 -18
- data/lib/carray/info.rb +1 -3
- data/lib/carray/inspect.rb +3 -5
- data/lib/carray/io/imagemagick.rb +1 -3
- data/lib/carray/iterator.rb +3 -3
- data/lib/carray/mask.rb +18 -7
- data/lib/carray/math.rb +4 -6
- data/lib/carray/math/histogram.rb +1 -3
- data/lib/carray/math/recurrence.rb +1 -3
- data/lib/carray/mkmf.rb +1 -3
- data/lib/carray/object/ca_obj_iterator.rb +1 -3
- data/lib/carray/object/ca_obj_link.rb +1 -3
- data/lib/carray/object/ca_obj_pack.rb +1 -3
- data/lib/carray/obsolete.rb +1 -17
- data/lib/carray/ordering.rb +29 -5
- data/lib/carray/serialize.rb +34 -25
- data/lib/carray/string.rb +1 -3
- data/lib/carray/struct.rb +3 -5
- data/lib/carray/testing.rb +5 -10
- data/lib/carray/time.rb +1 -3
- data/lib/carray/transform.rb +12 -3
- data/misc/NOTE +16 -38
- data/spec/Classes/CABitfield_spec.rb +58 -0
- data/spec/Classes/CABlockIterator_spec.rb +114 -0
- data/spec/Classes/CABlock_spec.rb +205 -0
- data/spec/Classes/CAField_spec.rb +39 -0
- data/spec/Classes/CAGrid_spec.rb +75 -0
- data/spec/Classes/CAMap_spec.rb +0 -0
- data/{test/test_CAMapping.rb → spec/Classes/CAMapping_spec.rb} +35 -36
- data/spec/Classes/CAObject_attribute_spec.rb +33 -0
- data/spec/Classes/CAObject_spec.rb +33 -0
- data/spec/Classes/CARefer_spec.rb +93 -0
- data/spec/Classes/CARepeat_spec.rb +65 -0
- data/spec/Classes/CASelect_spec.rb +22 -0
- data/spec/Classes/CAShift_spec.rb +16 -0
- data/spec/Classes/CAStruct_spec.rb +71 -0
- data/{test/test_CATranspose.rb → spec/Classes/CATranspose_spec.rb} +20 -21
- data/spec/Classes/CAUnboudRepeat_spec.rb +102 -0
- data/spec/Classes/CAWindow_spec.rb +54 -0
- data/spec/Classes/CAWrap_spec.rb +8 -0
- data/{test/test_CArray.rb → spec/Classes/CArray_spec.rb} +48 -92
- data/spec/Classes/CScalar_spec.rb +55 -0
- data/spec/Features/feature_130_spec.rb +19 -0
- data/spec/Features/feature_attributes_spec.rb +280 -0
- data/spec/Features/feature_boolean_spec.rb +98 -0
- data/spec/Features/feature_broadcast.rb +116 -0
- data/spec/Features/feature_cast_function.rb +19 -0
- data/spec/Features/feature_cast_spec.rb +33 -0
- data/spec/Features/feature_class_spec.rb +84 -0
- data/spec/Features/feature_complex_spec.rb +42 -0
- data/{test/test_composite.rb → spec/Features/feature_composite_spec.rb} +17 -18
- data/spec/Features/feature_convert_spec.rb +46 -0
- data/spec/Features/feature_copy_spec.rb +123 -0
- data/spec/Features/feature_creation_spec.rb +84 -0
- data/spec/Features/feature_element_spec.rb +144 -0
- data/spec/Features/feature_extream_spec.rb +54 -0
- data/spec/Features/feature_generate_spec.rb +74 -0
- data/spec/Features/feature_index_spec.rb +69 -0
- data/spec/Features/feature_mask_spec.rb +580 -0
- data/spec/Features/feature_math_spec.rb +97 -0
- data/spec/Features/feature_order_spec.rb +146 -0
- data/spec/Features/feature_ref_store_spec.rb +209 -0
- data/spec/Features/feature_serialization_spec.rb +125 -0
- data/spec/Features/feature_stat_spec.rb +397 -0
- data/spec/Features/feature_virtual_spec.rb +48 -0
- data/spec/Features/method_eq_spec.rb +81 -0
- data/spec/Features/method_is_nan_spec.rb +12 -0
- data/spec/Features/method_map_spec.rb +54 -0
- data/spec/Features/method_max_with.rb +20 -0
- data/spec/Features/method_min_with.rb +19 -0
- data/spec/Features/method_ne_spec.rb +18 -0
- data/spec/Features/method_project_spec.rb +188 -0
- data/spec/Features/method_ref_spec.rb +27 -0
- data/spec/Features/method_round_spec.rb +11 -0
- data/spec/Features/method_s_linspace_spec.rb +48 -0
- data/spec/Features/method_s_span_spec.rb +14 -0
- data/spec/Features/method_seq_spec.rb +47 -0
- data/spec/Features/method_sort_with.rb +43 -0
- data/spec/Features/method_sorted_with.rb +29 -0
- data/spec/Features/method_span_spec.rb +42 -0
- data/spec/Features/method_wrap_readonly_spec.rb +43 -0
- data/{test → spec/UnitTest}/test_CAVirtual.rb +0 -0
- data/spec/spec_all.rb +0 -1
- data/utils/convert_test.rb +73 -0
- data/utils/{extract_rdoc.rb → extract_yard.rb} +7 -12
- metadata +74 -58
- data/spec/CABlockIterator/CABlockIterator_spec.rb +0 -113
- data/spec/CArray/bug/store_spec.rb +0 -27
- data/spec/CArray/index/repeat_spec.rb +0 -10
- data/spec/CArray/method/eq_spec.rb +0 -80
- data/spec/CArray/method/is_nan_spec.rb +0 -12
- data/spec/CArray/method/ne_spec.rb +0 -18
- data/spec/CArray/method/round_spec.rb +0 -11
- data/spec/CArray/object/_attribute_spec.rb +0 -32
- data/spec/CArray/object/s_new_spec.rb +0 -31
- data/spec/CArray/serialize/Serialization_spec.rb +0 -89
- data/test/test_130.rb +0 -23
- data/test/test_ALL.rb +0 -49
- data/test/test_CABitfield.rb +0 -59
- data/test/test_CABlock.rb +0 -208
- data/test/test_CAField.rb +0 -40
- data/test/test_CAGrid.rb +0 -76
- data/test/test_CAMmap.rb +0 -11
- data/test/test_CARefer.rb +0 -94
- data/test/test_CARepeat.rb +0 -66
- data/test/test_CASelect.rb +0 -23
- data/test/test_CAShift.rb +0 -17
- data/test/test_CAWindow.rb +0 -55
- data/test/test_CAWrap.rb +0 -9
- data/test/test_CComplex.rb +0 -83
- data/test/test_CScalar.rb +0 -91
- data/test/test_attribute.rb +0 -281
- data/test/test_block_iterator.rb +0 -17
- data/test/test_boolean.rb +0 -99
- data/test/test_cast.rb +0 -33
- data/test/test_class.rb +0 -85
- data/test/test_complex.rb +0 -43
- data/test/test_convert.rb +0 -79
- data/test/test_copy.rb +0 -141
- data/test/test_creation.rb +0 -85
- data/test/test_element.rb +0 -146
- data/test/test_extream.rb +0 -55
- data/test/test_generate.rb +0 -75
- data/test/test_index.rb +0 -71
- data/test/test_mask.rb +0 -578
- data/test/test_math.rb +0 -98
- data/test/test_order.rb +0 -147
- data/test/test_ref_store.rb +0 -211
- data/test/test_stat.rb +0 -406
- data/test/test_struct.rb +0 -72
- data/test/test_virtual.rb +0 -49
data/lib/carray/serialize.rb
CHANGED
@@ -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
|
45
|
-
# mask
|
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
|
-
|
101
|
+
attributes = nil
|
100
102
|
if ca.attribute
|
101
|
-
|
103
|
+
attributes = ca.attribute.clone
|
102
104
|
end
|
103
105
|
if opt[:attribute]
|
104
|
-
(
|
106
|
+
(attributes ||= {}).update(opt[:attribute])
|
105
107
|
end
|
106
|
-
header[:has_attr] =
|
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
|
125
|
-
Marshal.dump(
|
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
|
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
|
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
|
-
#
|
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
|
#
|
data/lib/carray/testing.rb
CHANGED
@@ -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
|
-
|
49
|
-
|
50
|
-
|
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
|
|
data/lib/carray/transform.rb
CHANGED
@@ -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
|
-
*
|
57
|
-
|
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
|