FMI Library: part of JModelica.org
jm_vector_test.c
Go to the documentation of this file.
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <stdarg.h>
4 
5 #include "config_test.h"
6 #include <JM/jm_vector.h>
7 #include <JM/jm_stack.h>
8 
9 void print_int(int i,void* data) {
10  printf("%d\n", i);
11 }
12 
13 void print_dbl(double d,void* data) {
14  printf("%g\n", d);
15 }
16 
17 int compar_int(int* a, int* b) {
18  return (*a - *b);
19 }
20 
21 int return_code = CTEST_RETURN_SUCCESS;
22 
23 void log_error(const char* fmt, ...) {
24  va_list args;
25  va_start (args, fmt);
26  vprintf(fmt, args);
27  va_end (args);
28  return_code = CTEST_RETURN_FAIL;
29 }
30 
31 #define TESTVAL 49
32 
33 int main() {
34  int i, k;
35  jm_vector(int) stackv;
36  jm_stack(double)* s;
37 
38  jm_vector(int)* v = &stackv;
39  srand(0);
40  s = jm_stack_alloc(double)(100, 0 );
41 #define VINIT_SIZE 5
42  jm_vector_init(int)(v,VINIT_SIZE,0);
43  jm_vector_zero(int)(v);
44  jm_vector_set_item(int)(v, 2, TESTVAL);
45  for( i = 0; i < 32; i++) {
46  int x = i+TESTVAL;
47  int top;
48  jm_vector_push_back(int)(v,x);
49  jm_stack_push(double)(s,x);
50  top = (int)jm_stack_top(double)(s);
51  printf("pushed item %d=%d (stack top %g), vector size: %d, capacity: %d\n", i, x, jm_stack_top(double)(s), jm_vector_get_size(int)(v), jm_vector_reserve(int)(v,0));
52  if(top != x) log_error("Stack top does not match the pushed value \n");
53  if(jm_vector_get_size(int)(v) != VINIT_SIZE+i+1) log_error("Vector size %d is not as expected %d\n", jm_vector_get_size(int)(v), VINIT_SIZE+i+1);
54  }
55  {
56  size_t index = jm_vector_find_index(int)(v, &k,jm_compare_int);
57  k = TESTVAL;
58  if( index != 2) log_error("Index of '%d' should be '2' but got %d\n", TESTVAL, k );
59  }
60  for( i = 0; i < 22; i++) {
61  jm_stack_pop(double)(s);
62  }
63  jm_vector_resize_int(v,10);
64  printf("Printing the vector \n");
66  jm_vector_qsort(int)(v, jm_compare_int);
67  printf("Printing sorted vector \n");
69  printf("Index of %d is %d\n", k, jm_vector_bsearch_index(int)(v, &k, jm_compare_int));
70  printf("Printing the stack \n");
71  jm_stack_foreach(double)(s,print_dbl,0);
72 
73  jm_vector_free_data(int)(v);
74  jm_stack_free(double)(s);
75  return return_code;
76 }
#define jm_vector_find_index(T)
Definition: jm_vector.h:162
void log_error(const char *fmt,...)
#define jm_vector_foreach_c(T)
Definition: jm_vector.h:271
#define jm_vector_bsearch_index(T)
Definition: jm_vector.h:181
#define jm_stack_push(T)
Put an element on the stack.
Definition: jm_stack.h:111
#define jm_vector_free_data(T)
Definition: jm_vector.h:90
#define jm_vector_reserve(T)
Definition: jm_vector.h:213
#define jm_vector_zero(T)
Definition: jm_vector.h:193
#define VINIT_SIZE
jm_vector(JM_TEMPLATE_INSTANCE_TYPE)*jm_vector_alloc(JM_TEMPLATE_INSTANCE_TYPE)(size_t size
#define jm_vector_qsort(T)
Definition: jm_vector.h:170
#define jm_vector_push_back(T)
Definition: jm_vector.h:262
return v
#define jm_vector_init(T)
jm_vector_init initializes a vector allocated on stack.
Definition: jm_vector.h:82
int main()
#define jm_vector_get_size(T)
Definition: jm_vector.h:96
#define jm_vector_set_item(T)
Definition: jm_vector.h:187
#define jm_stack_free(T)
Release memory allocated for a stack.
Definition: jm_stack.h:60
void print_int(int i, void *data)
Definition: jm_vector_test.c:9
#define jm_stack_foreach(T)
Definition: jm_stack.h:136
#define jm_stack(T)
A basic stack of items.
Definition: jm_stack.h:41
#define jm_stack_top(T)
Definition: jm_stack.h:129
int return_code
int compar_int(int *a, int *b)
#define TESTVAL
#define jm_stack_pop(T)
Definition: jm_stack.h:123
#define jm_stack_alloc(T)
Allocates a stack with the given reserved memory.
Definition: jm_stack.h:52
void print_dbl(double d, void *data)