lulu 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZWFjMGJjNzk1NGM5YzRjYTQxYmZkMDUxMTA4OWJhZmI1YjMyYzZjYg==
4
+ OTEyMjAyN2MwMjQ5MjJhMDEwZjQzMjRmMWRhYTRiYzUwYjZkZWZkOA==
5
5
  data.tar.gz: !binary |-
6
- YTRkMjY0YzcyNWVlZWVjN2I2NWI5MmE3ZjI3NGE0M2Y1NzkxMzhkMQ==
6
+ NWM2MzllZGU0MDJhMjMxYzg0NTUxMWMyYmNlMmUyMDc5MGZmZDgxNQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NTE3YmQxOTljNzA2MjU5MDljYmRkZGE1ZjNjMWIyNTgyNzczYzZmNzM2ODdh
10
- Y2M2Mzg4NDk1OGM5MzNmNjgzZTY5ZmYyZGJkNzg0MGRmYmYwNDBkYzU0MDc5
11
- ZWM2NmRhNTk0MzZhZWFlZjMzOWI2MjkzYWVlNmU0Y2E2YjFmYWE=
9
+ NjNjYjJlODhiYTFlMzA4ZDRlOTdhNTk0MjZlNTU5NjI4NTE4MDRjMWI5NDg4
10
+ MzY4M2NiNDEyYTliZDdmN2Y3MjkzM2ZmZmJjMmZkOGIxNmNjMWY1YTkyMTgx
11
+ YjA0Y2Q0MGRlN2M2MGRkOTdhOTFlZWEzNWMyOTEwNGFiNGQ1M2I=
12
12
  data.tar.gz: !binary |-
13
- NTFhMzc0MDY1YjhjMWUwYjE1ZTgwY2FlZTAyOTk0NTI4MmFkNGNiMzkxYjAw
14
- NTY1M2Q5ODQ4YThmZjNhYzRkN2UxYjk2OTk0OTVjOWQ0ODQ1NjRhM2U1NjA2
15
- NzBjYmMwNWE3NGEyODA2MDBjYjM2MjNmMTM5N2UwMjFlN2Q1ZTc=
13
+ OTkxMjhlMjcxZjNkMzUyYzEyNTZlZTkyZjZkNzIwOTAzNmNmYzRjMmZmNTY4
14
+ YjM5YjkyNDM0N2JjMzMwZWZmYjVhY2E5YWYxNzY2NmVhNWZjM2E3MDE1YWEw
15
+ NTg1Njc0ZTQxYjdiZDNlNTFiMDE1OWUxOWUzMDY3YzdhZTlkMGI=
@@ -31,29 +31,29 @@ typedef struct marker_list_s {
31
31
  #define MARKER_LIST_DECL(Name) MARKER_LIST Name[1]; init_marker_list(Name)
32
32
  #define ml_set_marker_list_info(L, Kind, Scale) mr_info_set((L)->info, (Kind), (Scale))
33
33
 
34
- void init_marker_list(MARKER_LIST *list) {
34
+ static void init_marker_list(MARKER_LIST *list) {
35
35
  mr_info_init(list->info);
36
36
  list->markers = NULL;
37
37
  list->size = list->max_size = 0;
38
38
  }
39
39
 
40
- MARKER_LIST *new_marker_list(void) {
40
+ static MARKER_LIST *new_marker_list(void) {
41
41
  NewDecl(MARKER_LIST, list);
42
42
  init_marker_list(list);
43
43
  return list;
44
44
  }
45
45
 
46
- void clear_marker_list(MARKER_LIST *list) {
46
+ static void clear_marker_list(MARKER_LIST *list) {
47
47
  Free(list->markers);
48
48
  init_marker_list(list);
49
49
  }
50
50
 
51
- void free_marker_list(MARKER_LIST *list) {
51
+ static void free_marker_list(MARKER_LIST *list) {
52
52
  clear_marker_list(list);
53
53
  Free(list);
54
54
  }
55
55
 
56
- void add_marker(MARKER_LIST *list, MARKER_COORD x, MARKER_COORD y, MARKER_SIZE size) {
56
+ static void add_marker(MARKER_LIST *list, MARKER_COORD x, MARKER_COORD y, MARKER_SIZE size) {
57
57
  if (list->size >= list->max_size) {
58
58
  list->max_size = 4 + 2 * list->max_size;
59
59
  RenewArray(list->markers, list->max_size);
@@ -62,7 +62,7 @@ void add_marker(MARKER_LIST *list, MARKER_COORD x, MARKER_COORD y, MARKER_SIZE s
62
62
  mr_set(list->info, marker, x, y, size);
63
63
  }
64
64
 
65
- void ensure_headroom(MARKER_LIST *list) {
65
+ static void ensure_headroom(MARKER_LIST *list) {
66
66
  int needed_size = 2 * list->size - 1;
67
67
  if (list->max_size < needed_size) {
68
68
  list->max_size = needed_size;
@@ -70,7 +70,7 @@ void ensure_headroom(MARKER_LIST *list) {
70
70
  }
71
71
  }
72
72
 
73
- void compress(MARKER_LIST *list) {
73
+ static void compress(MARKER_LIST *list) {
74
74
  int dst = 0;
75
75
  for (int src = 0; src < list->size; src++)
76
76
  if (!mr_deleted_p(list->markers + src)) {
@@ -84,24 +84,24 @@ void compress(MARKER_LIST *list) {
84
84
 
85
85
  // -------- Ruby API implementation --------------------------------------------
86
86
 
87
- static void rb_api_free_marker_list(void *list) {
87
+ static void lulu_rb_api_free_marker_list(void *list) {
88
88
  free_marker_list(list);
89
89
  }
90
90
 
91
- static VALUE rb_api_new_marker_list(VALUE klass) {
91
+ static VALUE lulu_rb_api_new_marker_list(VALUE klass) {
92
92
  MARKER_LIST *list = new_marker_list();
93
- return Data_Wrap_Struct(klass, 0, rb_api_free_marker_list, list);
93
+ return Data_Wrap_Struct(klass, 0, lulu_rb_api_free_marker_list, list);
94
94
  }
95
95
 
96
96
  #define MARKER_LIST_FOR_VALUE_DECL(Var) MARKER_LIST *Var; Data_Get_Struct(Var ## _value, MARKER_LIST, Var)
97
97
 
98
- static VALUE rb_api_initialize_copy(VALUE dst_value, VALUE src_value)
98
+ static VALUE lulu_rb_api_initialize_copy(VALUE dst_value, VALUE src_value)
99
99
  #define ARGC_initialize_copy 1
100
100
  {
101
101
  if (dst_value == src_value)
102
102
  return src_value;
103
103
 
104
- if (TYPE(src_value) != T_DATA || RDATA(src_value)->dfree != (RUBY_DATA_FUNC)rb_api_free_marker_list)
104
+ if (TYPE(src_value) != T_DATA || RDATA(src_value)->dfree != (RUBY_DATA_FUNC)lulu_rb_api_free_marker_list)
105
105
  rb_raise(rb_eTypeError, "type mismatch (copy_marker_list)");
106
106
 
107
107
  MARKER_LIST_FOR_VALUE_DECL(src);
@@ -115,7 +115,7 @@ static VALUE rb_api_initialize_copy(VALUE dst_value, VALUE src_value)
115
115
  return dst_value;
116
116
  }
117
117
 
118
- static VALUE rb_api_clear(VALUE self_value)
118
+ static VALUE lulu_rb_api_clear(VALUE self_value)
119
119
  #define ARGC_clear 0
120
120
  {
121
121
  MARKER_LIST_FOR_VALUE_DECL(self);
@@ -123,7 +123,7 @@ static VALUE rb_api_clear(VALUE self_value)
123
123
  return self_value;
124
124
  }
125
125
 
126
- static VALUE rb_api_set_info(VALUE self_value, VALUE kind_value, VALUE scale_value)
126
+ static VALUE lulu_rb_api_set_info(VALUE self_value, VALUE kind_value, VALUE scale_value)
127
127
  #define ARGC_set_info 2
128
128
  {
129
129
  MARKER_LIST_FOR_VALUE_DECL(self);
@@ -144,7 +144,7 @@ static VALUE rb_api_set_info(VALUE self_value, VALUE kind_value, VALUE scale_val
144
144
  return self_value;
145
145
  }
146
146
 
147
- static VALUE rb_api_add(VALUE self_value, VALUE x_value, VALUE y_value, VALUE size_value)
147
+ static VALUE lulu_rb_api_add(VALUE self_value, VALUE x_value, VALUE y_value, VALUE size_value)
148
148
  #define ARGC_add 3
149
149
  {
150
150
  MARKER_LIST_FOR_VALUE_DECL(self);
@@ -152,14 +152,14 @@ static VALUE rb_api_add(VALUE self_value, VALUE x_value, VALUE y_value, VALUE si
152
152
  return INT2FIX(self->size);
153
153
  }
154
154
 
155
- static VALUE rb_api_length(VALUE self_value)
155
+ static VALUE lulu_rb_api_length(VALUE self_value)
156
156
  #define ARGC_length 0
157
157
  {
158
158
  MARKER_LIST_FOR_VALUE_DECL(self);
159
159
  return INT2FIX(self->size);
160
160
  }
161
161
 
162
- static VALUE rb_api_marker(VALUE self_value, VALUE index)
162
+ static VALUE lulu_rb_api_marker(VALUE self_value, VALUE index)
163
163
  #define ARGC_marker 1
164
164
  {
165
165
  MARKER_LIST_FOR_VALUE_DECL(self);
@@ -175,7 +175,7 @@ static VALUE rb_api_marker(VALUE self_value, VALUE index)
175
175
  return Qnil;
176
176
  }
177
177
 
178
- static VALUE rb_api_parts(VALUE self_value, VALUE index)
178
+ static VALUE lulu_rb_api_parts(VALUE self_value, VALUE index)
179
179
  #define ARGC_parts 1
180
180
  {
181
181
  MARKER_LIST_FOR_VALUE_DECL(self);
@@ -197,7 +197,7 @@ static VALUE rb_api_parts(VALUE self_value, VALUE index)
197
197
  return Qnil;
198
198
  }
199
199
 
200
- static VALUE rb_api_deleted(VALUE self_value, VALUE index)
200
+ static VALUE lulu_rb_api_deleted(VALUE self_value, VALUE index)
201
201
  #define ARGC_deleted 1
202
202
  {
203
203
  MARKER_LIST_FOR_VALUE_DECL(self);
@@ -207,7 +207,7 @@ static VALUE rb_api_deleted(VALUE self_value, VALUE index)
207
207
  return Qnil;
208
208
  }
209
209
 
210
- static VALUE rb_api_compress(VALUE self_value)
210
+ static VALUE lulu_rb_api_compress(VALUE self_value)
211
211
  #define ARGC_compress 0
212
212
  {
213
213
  MARKER_LIST_FOR_VALUE_DECL(self);
@@ -215,23 +215,25 @@ static VALUE rb_api_compress(VALUE self_value)
215
215
  return INT2FIX(self->size);
216
216
  }
217
217
 
218
- static VALUE rb_api_merge(VALUE self_value)
218
+ static VALUE lulu_rb_api_merge(VALUE self_value)
219
219
  #define ARGC_merge 0
220
220
  {
221
221
  MARKER_LIST_FOR_VALUE_DECL(self);
222
- ensure_headroom(self);
223
222
  compress(self);
223
+ ensure_headroom(self);
224
224
  self->size = merge_markers_fast(self->info, self->markers, self->size);
225
225
  return INT2FIX(self->size);
226
226
  }
227
227
 
228
- #define FUNCTION_TABLE_ENTRY(Name) { #Name, RUBY_METHOD_FUNC(rb_api_ ## Name), ARGC_ ## Name }
228
+ #define FUNCTION_TABLE_ENTRY(Name) { #Name, RUBY_METHOD_FUNC(lulu_rb_api_ ## Name), ARGC_ ## Name }
229
229
 
230
- static struct ft_entry {
230
+ struct ft_entry {
231
231
  const char *name;
232
232
  VALUE (*func)(ANYARGS);
233
233
  int argc;
234
- } function_table[] = {
234
+ };
235
+
236
+ static struct ft_entry function_table[] = {
235
237
  FUNCTION_TABLE_ENTRY(add),
236
238
  FUNCTION_TABLE_ENTRY(compress),
237
239
  FUNCTION_TABLE_ENTRY(clear),
@@ -246,10 +248,12 @@ static struct ft_entry {
246
248
 
247
249
  #define STRING_CONST_TABLE_ENTRY(Name) { #Name, Name }
248
250
 
249
- static struct sct_entry {
251
+ struct sct_entry {
250
252
  const char *name;
251
253
  const char *val;
252
- } string_const_table[] = {
254
+ };
255
+
256
+ static struct sct_entry string_const_table[] = {
253
257
  STRING_CONST_TABLE_ENTRY(EXT_VERSION)
254
258
  };
255
259
 
@@ -257,7 +261,7 @@ void Init_lulu(void)
257
261
  {
258
262
  VALUE module = rb_define_module("Lulu");
259
263
  VALUE klass = rb_define_class_under(module, "MarkerList", rb_cObject);
260
- rb_define_alloc_func(klass, rb_api_new_marker_list);
264
+ rb_define_alloc_func(klass, lulu_rb_api_new_marker_list);
261
265
 
262
266
  for (int i = 0; i < STATIC_ARRAY_SIZE(function_table); i++) {
263
267
  struct ft_entry *e = function_table + i;
@@ -8,6 +8,8 @@
8
8
  #ifndef MARKER_H_
9
9
  #define MARKER_H_
10
10
 
11
+ #include "namespace.h"
12
+
11
13
  typedef double MARKER_COORD;
12
14
  typedef double MARKER_DISTANCE;
13
15
  /**
@@ -57,14 +59,31 @@ typedef struct marker_extent_s {
57
59
  #define mr_s(M) ((M)->y - (M)->r)
58
60
  #define mr_n(M) ((M)->y + (M)->r)
59
61
 
62
+ #define mr_init(Marker, NMarkers) NAME(mr_init)(Marker, NMarkers)
60
63
  void mr_init(MARKER *marker, int n_markers);
64
+
65
+ #define mr_reset_parts(Marker) NAME(mr_reset_parts)(Marker)
61
66
  void mr_reset_parts(MARKER *marker);
67
+
68
+ #define mr_info_init(Info) NAME(mr_info_init)(Info)
62
69
  void mr_info_init(MARKER_INFO *info);
70
+
71
+ #define mr_info_set(Info, Kind, Scale) NAME(mr_info_set)(Info, Kind, Scale)
63
72
  void mr_info_set(MARKER_INFO *info, MARKER_KIND kind, MARKER_DISTANCE scale);
73
+
74
+ #define mr_set(Info, Marker, X, Y, Size) NAME(mr_set)(Info, Marker, X, Y, Size)
64
75
  void mr_set(MARKER_INFO *info, MARKER *marker, MARKER_COORD x, MARKER_COORD y, MARKER_SIZE size);
76
+
77
+ #define mr_merge(Info, Markers, Merged, A, B) NAME(mr_merge)(Info, Markers, Merged, A, B)
65
78
  void mr_merge(MARKER_INFO *info, MARKER *markers, int merged, int a, int b);
79
+
80
+ #define mr_distance(Info, A, B) NAME(mr_distance)(Info, A, B)
66
81
  MARKER_DISTANCE mr_distance(MARKER_INFO *info, MARKER *a, MARKER *b);
82
+
83
+ #define size_to_radius(Info, Size) NAME(size_to_radius)(Info, Size)
67
84
  MARKER_DISTANCE size_to_radius(MARKER_INFO *info, MARKER_SIZE size);
85
+
86
+ #define get_marker_array_extent(A, NMarkers, Ext) NAME(get_marker_array_extent)(A, NMarkers, Ext)
68
87
  void get_marker_array_extent(MARKER *a, int n_markers, MARKER_EXTENT *ext);
69
88
 
70
89
  #endif /* MARKER_H_ */
@@ -8,8 +8,10 @@
8
8
  #ifndef MERGER_H_
9
9
  #define MERGER_H_
10
10
 
11
+ #include "namespace.h"
11
12
  #include "marker.h"
12
13
 
14
+ #define merge_markers_fast(Info, Markers, MarkersSize) NAME(merge_markers_fast)(Info, Markers, MarkersSize)
13
15
  int merge_markers_fast(MARKER_INFO *info, MARKER *markers, int markers_size);
14
16
 
15
17
  #endif /* MERGER_H_ */
@@ -0,0 +1,14 @@
1
+ /*
2
+ * namespace.h
3
+ *
4
+ * Created on: Apr 3, 2014
5
+ * Author: generessler
6
+ */
7
+
8
+ #ifndef NAMESPACE_H_
9
+ #define NAMESPACE_H_
10
+
11
+ #define NAME(X) lulu_ ## X
12
+
13
+ #endif /* NAMESPACE_H_ */
14
+
@@ -8,6 +8,8 @@
8
8
  #ifndef PRIORITY_QUEUE_H_
9
9
  #define PRIORITY_QUEUE_H_
10
10
 
11
+ #include "namespace.h"
12
+
11
13
  typedef double PRIORITY_QUEUE_VALUE;
12
14
 
13
15
  typedef struct priority_queue_s {
@@ -19,37 +21,46 @@ typedef struct priority_queue_s {
19
21
  } PRIORITY_QUEUE;
20
22
 
21
23
  // Initialize a newly allocated priority queue structure.
24
+ #define pq_init(Q) NAME(pq_init)(Q)
22
25
  void pq_init(PRIORITY_QUEUE *q);
23
26
 
24
27
  #define PRIORITY_QUEUE_DECL(Q) PRIORITY_QUEUE Q[1]; pq_init(Q)
25
28
 
26
29
  // Clear a previously initialized and possibly set up priority queue, returning
27
30
  // it to the initialized state but with all resourced freed.
31
+ #define pq_clear(Q) NAME(pq_clear)(Q)
28
32
  void pq_clear(PRIORITY_QUEUE *q);
29
33
 
30
34
  // Build the queue with given pre-allocated and filled array of values.
35
+ #define pq_set_up(Q, Values, Size) NAME(pq_set_up)(Q, Values, Size)
31
36
  void pq_set_up(PRIORITY_QUEUE *q, PRIORITY_QUEUE_VALUE *values, int size);
32
37
 
33
38
  // Build the queue with given pre-allocated and filled array of values
34
39
  // and given heap indices. Note the indices are owned by the heap
35
40
  // after set up and will be freed with the heap.
41
+ #define pq_set_up_heap(Q, Heap, Size, Values, MaxSize) NAME(pq_set_up_heap)(Q, Heap, Size, Values, MaxSize)
36
42
  void pq_set_up_heap(PRIORITY_QUEUE *q,
37
43
  int *heap, int size,
38
44
  PRIORITY_QUEUE_VALUE *values, int max_size);
39
45
 
40
46
  // Return the index of the minimum value on the queue.
47
+ #define pq_peek_min(Q) NAME(pq_peek_min)(Q)
41
48
  int pq_peek_min(PRIORITY_QUEUE *q);
42
49
 
43
50
  // Remove and return the index of the minimum value on the queue.
51
+ #define pq_get_min(Q) NAME(pq_get_min)(Q)
44
52
  int pq_get_min(PRIORITY_QUEUE *q);
45
53
 
46
54
  // Update the queue given that the value at index i has changed.
55
+ #define pq_update(Q, I) NAME(pq_update)(Q, I)
47
56
  void pq_update(PRIORITY_QUEUE *q, int i);
48
57
 
49
58
  // Add a new value with index i into the queue.
59
+ #define pq_add(Q, I) NAME(pq_add)(Q, I)
50
60
  void pq_add(PRIORITY_QUEUE *q, int i);
51
61
 
52
62
  // Delete index i from the heap, making the corresponding key an orphan.
63
+ #define pq_delete(Q, I) NAME(pq_delete)(Q, I)
53
64
  void pq_delete(PRIORITY_QUEUE *q, int i);
54
65
 
55
66
  // Return an array containing indices currently in the heap.
@@ -8,6 +8,7 @@
8
8
  #ifndef QT_H_
9
9
  #define QT_H_
10
10
 
11
+ #include "namespace.h"
11
12
  #include "marker.h"
12
13
 
13
14
  typedef struct node_s {
@@ -46,13 +47,27 @@ typedef struct quadtree_s {
46
47
 
47
48
  #define QUADTREE_DECL(Name) QUADTREE Name[1]; qt_init(Name)
48
49
 
50
+ #define qt_init(T) NAME(qt_init)(T)
49
51
  void qt_init(QUADTREE *qt);
52
+
53
+ #define qt_setup(T, MaxDepth, X, Y, W, H, Info) NAME(qt_setup)(T, MaxDepth, X, Y, W, H, Info)
50
54
  void qt_setup(QUADTREE *qt, int max_depth,
51
55
  MARKER_COORD x, MARKER_COORD y, MARKER_DISTANCE w, MARKER_DISTANCE h,
52
56
  MARKER_INFO *info);
57
+
58
+ #define qt_clear(T) NAME(qt_clear)(T)
59
+ void qt_clear(QUADTREE *qt);
60
+
61
+ #define qt_insert(T, Marker) NAME(qt_insert)(T, Marker)
53
62
  void qt_insert(QUADTREE *qt, MARKER *marker);
63
+
64
+ #define qt_delete(T, Marker) NAME(qt_delete)(T, Marker)
54
65
  void qt_delete(QUADTREE *qt, MARKER *marker);
66
+
67
+ #define qt_nearest(T, Marker) NAME(qt_nearest)(T, Marker)
55
68
  MARKER *qt_nearest(QUADTREE *qt, MARKER *marker);
69
+
70
+ #define qt_nearest_wrt(Markers, T, A) NAME(qt_nearest_wrt)(Markers, T, A)
56
71
  int qt_nearest_wrt(MARKER *markers, QUADTREE *qt, int a);
57
72
 
58
73
  #endif /* QT_H_ */
@@ -8,6 +8,8 @@
8
8
  #ifndef TEST_H_
9
9
  #define TEST_H_
10
10
 
11
+ #ifdef UNIT_TESTS
12
+
11
13
  #include "marker.h"
12
14
 
13
15
  int emit_markers(const char *name, MARKER *markers, int n_markers);
@@ -22,4 +24,6 @@ int qt_test(int size);
22
24
  int pq_test(int size);
23
25
  int merge_test(int test_markers_size);
24
26
 
27
+ #endif
28
+
25
29
  #endif /* TEST_H_ */
@@ -8,6 +8,8 @@
8
8
  #ifndef UTILITY_H_
9
9
  #define UTILITY_H_
10
10
 
11
+ #include "namespace.h"
12
+
11
13
  #define STATIC_ARRAY_SIZE(A) ((int)(sizeof A / sizeof A[0]))
12
14
 
13
15
  #ifdef LULU_STD_C
@@ -30,7 +32,10 @@
30
32
  Ptr = NULL; \
31
33
  } while (0)
32
34
 
35
+ #define safe_malloc(Size, File, Line) NAME(safe_malloc)(Size, File, Line)
33
36
  void *safe_malloc(size_t size, const char *file, int line);
37
+
38
+ #define safe_realloc(P, Size, File, Line) NAME(safe_realloc)(P, Size, File, Line)
34
39
  void *safe_realloc(void *p, size_t size, const char *file, int line);
35
40
 
36
41
  #endif
@@ -72,6 +77,7 @@ void trace(const char *fmt, ...);
72
77
  #define TRACE(Args)
73
78
  #endif
74
79
 
80
+ #define high_bit_position(N) NAME(high_bit_position)(N)
75
81
  int high_bit_position(unsigned n);
76
82
 
77
83
  #endif /* UTILITY_H_ */
@@ -1,3 +1,3 @@
1
1
  module Lulu
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -3,14 +3,7 @@ require 'spec_helper'
3
3
  # Test the Lulu API.
4
4
  describe Lulu::MarkerList do
5
5
 
6
- TEST_SIZE = 10000
7
-
8
- let(:list) do
9
- list = Lulu::MarkerList.new
10
- srand(42)
11
- TEST_SIZE.times{ |n| list.add(Random.rand(1000), Random.rand(1000), Random.rand(100)) }
12
- list
13
- end
6
+ let(:list) { new_marker_list }
14
7
 
15
8
  it 'should have length matching number of markers added' do
16
9
  list.length.should == TEST_SIZE
@@ -36,4 +29,8 @@ describe Lulu::MarkerList do
36
29
  n.should == list.compress
37
30
  end
38
31
 
32
+ it 'should perform fine over multiple runs with unit increases in input length to provoke memory bugs' do
33
+ 1000.times { |i| new_marker_list(10000 + i).merge }
34
+ end
35
+
39
36
  end
@@ -1 +1,10 @@
1
- require 'lulu'
1
+ require 'lulu'
2
+
3
+ TEST_SIZE = 10000
4
+
5
+ def new_marker_list(size = TEST_SIZE)
6
+ list = Lulu::MarkerList.new
7
+ srand(42)
8
+ TEST_SIZE.times{ |n| list.add(Random.rand(1000), Random.rand(1000), Random.rand(100)) }
9
+ list
10
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lulu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gene Ressler
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-04 00:00:00.000000000 Z
11
+ date: 2014-05-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -96,6 +96,7 @@ files:
96
96
  - ext/lulu/marker.h
97
97
  - ext/lulu/merger.c
98
98
  - ext/lulu/merger.h
99
+ - ext/lulu/namespace.h
99
100
  - ext/lulu/pq.c
100
101
  - ext/lulu/pq.h
101
102
  - ext/lulu/qt.c