~ubuntu-branches/ubuntu/trusty/geis/trusty

« back to all changes in this revision

Viewing changes to testsuite/geis-util/check_geis_bag.c

  • Committer: Package Import Robot
  • Author(s): Chase Douglas
  • Date: 2012-07-30 08:51:42 UTC
  • Revision ID: package-import@ubuntu.com-20120730085142-jrc33ygjvt0ob1wl
Tags: upstream-2.2.11
ImportĀ upstreamĀ versionĀ 2.2.11

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/**
 
2
 * @file check_geis_bag.c
 
3
 * @brief Unit test for geis-util/geis_bag
 
4
 */
 
5
/*
 
6
 * Copyright 2011 Canonical Ltd.
 
7
 *
 
8
 * This program is free software: you can redistribute it and/or modify it 
 
9
 * under the terms of the GNU General Public License version 3, as published 
 
10
 * by the Free Software Foundation.
 
11
 * 
 
12
 * This program is distributed in the hope that it will be useful, but 
 
13
 * WITHOUT ANY WARRANTY; without even the implied warranties of 
 
14
 * MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR 
 
15
 * PURPOSE.  See the GNU General Public License for more details.
 
16
 * 
 
17
 * You should have received a copy of the GNU General Public License along 
 
18
 * with this program.  If not, see <http://www.gnu.org/licenses/>.
 
19
 */
 
20
 
 
21
#include <check.h>
 
22
 
 
23
#include "geis_bag.h"
 
24
 
 
25
/* fixtures */
 
26
GeisBag g_bag;
 
27
 
 
28
struct TestStruct
 
29
{
 
30
    int  ival;
 
31
    char sval[32];
 
32
};
 
33
 
 
34
 
 
35
/* fixture setup */
 
36
static void
 
37
construct_bag()
 
38
{
 
39
  g_bag = geis_bag_new(sizeof(struct TestStruct),
 
40
                       1,
 
41
                       geis_bag_default_growth_factor);
 
42
}
 
43
 
 
44
/* fixture teardown */
 
45
static void
 
46
destroy_bag()
 
47
{
 
48
  geis_bag_delete(g_bag);
 
49
}
 
50
 
 
51
 
 
52
/* verify bag construction/destruction */
 
53
START_TEST(construction)
 
54
{
 
55
  GeisBag bag = geis_bag_new(1,
 
56
                             geis_bag_default_init_alloc,
 
57
                             geis_bag_default_growth_factor);
 
58
  fail_unless(bag != NULL, "failed to create generic bag");
 
59
  geis_bag_delete(bag);
 
60
}
 
61
END_TEST
 
62
 
 
63
 
 
64
START_TEST(append)
 
65
{
 
66
  struct TestStruct datum = { 1, "borf" };
 
67
  GeisStatus status = geis_bag_append(g_bag, &datum);
 
68
  fail_unless(status == GEIS_STATUS_SUCCESS,
 
69
              "unexpected result from geis_bag_append()");
 
70
}
 
71
END_TEST
 
72
 
 
73
 
 
74
START_TEST(count)
 
75
{
 
76
  struct TestStruct datum1 = { 1, "borf" };
 
77
  struct TestStruct datum2 = { 2, "barf" };
 
78
  GeisSize count = geis_bag_count(g_bag);
 
79
  fail_unless(0 == count,
 
80
              "unexpected count in bag, expected %zu got %zu", 0, count);
 
81
  GeisStatus status = geis_bag_append(g_bag, &datum1);
 
82
  fail_unless(status == GEIS_STATUS_SUCCESS,
 
83
              "unexpected result from geis_bag_append()");
 
84
  count = geis_bag_count(g_bag);
 
85
  fail_unless(1 == count,
 
86
              "unexpected count in bag: expected %zu got %zu", 1, count);
 
87
  status = geis_bag_append(g_bag, &datum2);
 
88
  fail_unless(status == GEIS_STATUS_SUCCESS,
 
89
              "unexpected result from geis_bag_append()");
 
90
  count = geis_bag_count(g_bag);
 
91
  fail_unless(2 == count,
 
92
              "unexpected count in bag: expected %zu got %zu", 2, count);
 
93
}
 
94
END_TEST
 
95
 
 
96
 
 
97
START_TEST(at)
 
98
{
 
99
  struct TestStruct datum1 = { 1, "borf" };
 
100
  struct TestStruct datum2 = { 2, "barf" };
 
101
  GeisStatus status = geis_bag_append(g_bag, &datum1);
 
102
  fail_unless(status == GEIS_STATUS_SUCCESS,
 
103
              "unexpected result from geis_bag_append()");
 
104
  status = geis_bag_append(g_bag, &datum2);
 
105
  fail_unless(status == GEIS_STATUS_SUCCESS,
 
106
              "unexpected result from geis_bag_append()");
 
107
 
 
108
  struct TestStruct *odatum = geis_bag_at(g_bag, 0);
 
109
  fail_unless(datum1.ival == odatum->ival,
 
110
              "inserted and retrived data do not match: expected %d got %d",
 
111
              datum1.ival, odatum->ival);
 
112
}
 
113
END_TEST
 
114
 
 
115
 
 
116
START_TEST(remove)
 
117
{
 
118
  struct TestStruct datum1 = { 1, "borf" };
 
119
  struct TestStruct datum2 = { 2, "barf" };
 
120
  GeisStatus status = geis_bag_append(g_bag, &datum1);
 
121
  fail_unless(status == GEIS_STATUS_SUCCESS,
 
122
              "unexpected result from geis_bag_append()");
 
123
  status = geis_bag_append(g_bag, &datum2);
 
124
  fail_unless(status == GEIS_STATUS_SUCCESS,
 
125
              "unexpected result from geis_bag_append()");
 
126
 
 
127
  status = geis_bag_remove(g_bag, 0);
 
128
  fail_unless(status == GEIS_STATUS_SUCCESS,
 
129
              "unexpected result from geis_bag_remove()");
 
130
  GeisSize count = geis_bag_count(g_bag);
 
131
  fail_unless(1 == count,
 
132
              "unexpected count in bag, expected %zu got %zu", 1, count);
 
133
  struct TestStruct *odatum = geis_bag_at(g_bag, 0);
 
134
  fail_unless(datum2.ival == odatum->ival,
 
135
              "bad retrived data: expected %d got %d",
 
136
              datum2.ival, odatum->ival);
 
137
}
 
138
END_TEST
 
139
 
 
140
 
 
141
/* boilerplate */
 
142
Suite *
 
143
make_geis_bag_suite()
 
144
{
 
145
  Suite *s = suite_create("geis_bag");
 
146
 
 
147
  TCase *create = tcase_create("geis-bag-creation");
 
148
  tcase_add_test(create, construction);
 
149
  suite_add_tcase(s, create);
 
150
 
 
151
  TCase *usage = tcase_create("geis-bag-usage");
 
152
  tcase_add_checked_fixture(usage, construct_bag, destroy_bag);
 
153
  tcase_add_test(usage, append);
 
154
  tcase_add_test(usage, count);
 
155
  tcase_add_test(usage, at);
 
156
  tcase_add_test(usage, remove);
 
157
  suite_add_tcase(s, usage);
 
158
 
 
159
  return s;
 
160
}
 
161