carray 1.5.1 → 1.5.6
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.
- 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
|