Groonga 3.0.9 Source Code Document
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
test-cast-basic.c
Go to the documentation of this file.
1 /* -*- c-basic-offset: 2; coding: utf-8 -*- */
2 /*
3  Copyright (C) 2009-2011 Kouhei Sutou <kou@clear-code.com>
4 
5  This library is free software; you can redistribute it and/or
6  modify it under the terms of the GNU Lesser General Public
7  License version 2.1 as published by the Free Software Foundation.
8 
9  This library is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  Lesser General Public License for more details.
13 
14  You should have received a copy of the GNU Lesser General Public
15  License along with this library; if not, write to the Free Software
16  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 */
18 
19 #include <db.h>
20 
21 #include <gcutter.h>
22 #include <glib/gstdio.h>
23 
24 #include "../lib/grn-assertions.h"
25 
26 void data_text_to_bool(void);
27 void test_text_to_bool(gconstpointer data);
28 void test_text_to_int8(void);
29 void test_text_to_uint8(void);
30 void test_text_to_int16(void);
31 void test_text_to_uint16(void);
32 void test_text_to_int32(void);
33 void test_text_to_uint32(void);
34 void test_text_to_int64(void);
35 void test_text_to_uint64(void);
36 void test_text_to_float(void);
37 void test_text_to_time(void);
38 void test_text_to_geo_point(void);
49 
50 void data_text_error(void);
51 void test_text_error(gconstpointer data);
52 
53 void test_bool_to_bool(void);
54 
55 void data_int32_to_bool(void);
56 void test_int32_to_bool(gconstpointer data);
57 void test_int32_to_int8(void);
58 void test_int32_to_uint8(void);
59 void test_int32_to_int16(void);
60 void test_int32_to_uint16(void);
61 void test_int32_to_int32(void);
62 void test_int32_to_uint32(void);
63 void test_int32_to_int64(void);
64 void test_int32_to_uint64(void);
65 void test_int32_to_float(void);
66 void test_int32_to_time(void);
69 
70 void data_uint32_to_bool(void);
71 void test_uint32_to_bool(gconstpointer data);
72 void test_uint32_to_int8(void);
73 void test_uint32_to_uint8(void);
74 void test_uint32_to_int16(void);
75 void test_uint32_to_uint16(void);
76 void test_uint32_to_int32(void);
77 void test_uint32_to_uint32(void);
78 void test_uint32_to_int64(void);
79 void test_uint32_to_uint64(void);
80 void test_uint32_to_float(void);
81 void test_uint32_to_time(void);
82 
83 void data_int64_to_bool(void);
84 void test_int64_to_bool(gconstpointer data);
85 void test_int64_to_int8(void);
86 void test_int64_to_uint8(void);
87 void test_int64_to_int16(void);
88 void test_int64_to_uint16(void);
89 void test_int64_to_int32(void);
90 void test_int64_to_uint32(void);
91 void test_int64_to_int64(void);
92 void test_int64_to_uint64(void);
93 void test_int64_to_float(void);
94 void test_int64_to_time(void);
95 
96 void data_uint64_to_bool(void);
97 void test_uint64_to_bool(gconstpointer data);
98 void test_uint64_to_int8(void);
99 void test_uint64_to_uint8(void);
100 void test_uint64_to_int16(void);
101 void test_uint64_to_uint16(void);
102 void test_uint64_to_int32(void);
103 void test_uint64_to_uint32(void);
104 void test_uint64_to_int64(void);
105 void test_uint64_to_uint64(void);
106 void test_uint64_to_float(void);
107 void test_uint64_to_time(void);
108 
113 
114 static grn_logger_info *logger;
115 static grn_ctx context;
116 static grn_obj src, dest;
117 
118 void
120 {
121  logger = setup_grn_logger();
122  grn_ctx_init(&context, 0);
123  GRN_VOID_INIT(&src);
124  GRN_VOID_INIT(&dest);
125 }
126 
127 void
129 {
130  grn_obj_remove(&context, &src);
131  grn_obj_remove(&context, &dest);
132  grn_ctx_fin(&context);
133  teardown_grn_logger(logger);
134 }
135 
136 static void
137 set_text(const gchar *text)
138 {
139  grn_obj_reinit(&context, &src, GRN_DB_TEXT, 0);
140  if (text) {
141  GRN_TEXT_PUTS(&context, &src, text);
142  }
143 }
144 
145 static void
146 cast_text(const gchar *text)
147 {
148  set_text(text);
149  grn_test_assert(grn_obj_cast(&context, &src, &dest, GRN_FALSE));
150 }
151 
152 void
154 {
155 #define ADD_DATA(label, expected, text) \
156  gcut_add_datum(label, \
157  "expected", G_TYPE_UINT, expected, \
158  "text", G_TYPE_STRING, text, \
159  NULL)
160 
161  ADD_DATA("empty", GRN_FALSE, "");
162  ADD_DATA("NULL", GRN_FALSE, NULL);
163  ADD_DATA("true", GRN_TRUE, "true");
164  ADD_DATA("false", GRN_TRUE, "false");
165 
166 #undef ADD_DATA
167 }
168 
169 void
170 test_text_to_bool(gconstpointer data)
171 {
172  grn_obj_reinit(&context, &dest, GRN_DB_BOOL, 0);
173  cast_text(gcut_data_get_string(data, "text"));
174  cut_assert_equal_boolean(gcut_data_get_uint(data, "expected"),
175  GRN_BOOL_VALUE(&dest));
176 }
177 
178 void
180 {
181  grn_obj_reinit(&context, &dest, GRN_DB_INT8, 0);
182  cast_text("-29");
183  cut_assert_equal_int(-29, GRN_INT8_VALUE(&dest));
184 }
185 
186 void
188 {
189  grn_obj_reinit(&context, &dest, GRN_DB_UINT8, 0);
190  cast_text("29");
191  cut_assert_equal_uint(29, GRN_UINT8_VALUE(&dest));
192 }
193 
194 void
196 {
197  grn_obj_reinit(&context, &dest, GRN_DB_INT16, 0);
198  cast_text("-2929");
199  cut_assert_equal_int(-2929, GRN_INT16_VALUE(&dest));
200 }
201 
202 void
204 {
205  grn_obj_reinit(&context, &dest, GRN_DB_UINT16, 0);
206  cast_text("2929");
207  cut_assert_equal_uint(2929, GRN_UINT16_VALUE(&dest));
208 }
209 
210 void
212 {
213  grn_obj_reinit(&context, &dest, GRN_DB_INT32, 0);
214  cast_text("-29292929");
215  cut_assert_equal_int(-29292929, GRN_INT32_VALUE(&dest));
216 }
217 
218 void
220 {
221  grn_obj_reinit(&context, &dest, GRN_DB_UINT32, 0);
222  cast_text("29292929");
223  cut_assert_equal_uint(29292929, GRN_UINT32_VALUE(&dest));
224 }
225 
226 void
228 {
229  grn_obj_reinit(&context, &dest, GRN_DB_INT64, 0);
230  cast_text("-2929292929292929");
231  gcut_assert_equal_int64(G_GINT64_CONSTANT(-2929292929292929),
232  GRN_INT64_VALUE(&dest));
233 }
234 
235 void
237 {
238  grn_obj_reinit(&context, &dest, GRN_DB_UINT64, 0);
239  cast_text("2929292929292929");
240  gcut_assert_equal_uint64(G_GUINT64_CONSTANT(2929292929292929),
241  GRN_UINT64_VALUE(&dest));
242 }
243 
244 void
246 {
247  grn_obj_reinit(&context, &dest, GRN_DB_FLOAT, 0);
248  cast_text("29.029");
249  cut_assert_equal_double(29.029, 0.001, GRN_FLOAT_VALUE(&dest));
250 }
251 
252 void
254 {
255  long long int sec, usec;
256 
257  grn_obj_reinit(&context, &dest, GRN_DB_TIME, 0);
258  cast_text("2009/11/24 05:52:10.02929");
259  GRN_TIME_UNPACK(GRN_TIME_VALUE(&dest), sec, usec);
260  cut_assert_equal_int(1259009530, sec);
261  cut_assert_equal_int(29290, usec);
262 }
263 
264 void
266 {
267  gint takane_latitude, takane_longitude;
268 
269  grn_obj_reinit(&context, &dest, GRN_DB_WGS84_GEO_POINT, 0);
270  cast_text("130194581x503802073");
271  GRN_GEO_POINT_VALUE(&dest, takane_latitude, takane_longitude);
272  cut_assert_equal_int(130194581, takane_latitude);
273  cut_assert_equal_int(503802073, takane_longitude);
274 }
275 
276 void
278 {
279  gint empty_latitude, empty_longitude;
280 
281  grn_obj_reinit(&context, &dest, GRN_DB_WGS84_GEO_POINT, 0);
282  cast_text("");
283  GRN_GEO_POINT_VALUE(&dest, empty_latitude, empty_longitude);
284  cut_assert_equal_int(0, empty_latitude);
285  cut_assert_equal_int(0, empty_longitude);
286 }
287 
288 void
290 {
291  gint takane_latitude, takane_longitude;
292 
293  grn_obj_reinit(&context, &dest, GRN_DB_WGS84_GEO_POINT, 0);
294 #define GEO_TEXT "130194581x503802073"
295  set_text(GEO_TEXT ".0");
296  cast_text(GEO_TEXT);
297 #undef GEO_TEXT
298  GRN_GEO_POINT_VALUE(&dest, takane_latitude, takane_longitude);
299  cut_assert_equal_int(130194581, takane_latitude);
300  cut_assert_equal_int(503802073, takane_longitude);
301 }
302 
303 void
305 {
306  gint takane_latitude, takane_longitude;
307 
308  grn_obj_reinit(&context, &dest, GRN_DB_WGS84_GEO_POINT, 0);
309  cast_text("130194581,503802073");
310  GRN_GEO_POINT_VALUE(&dest, takane_latitude, takane_longitude);
311  cut_assert_equal_int(130194581, takane_latitude);
312  cut_assert_equal_int(503802073, takane_longitude);
313 }
314 
315 void
317 {
318  grn_obj_reinit(&context, &dest, GRN_DB_WGS84_GEO_POINT, 0);
319  set_text("130194581?503802073");
321  grn_obj_cast(&context, &src, &dest, FALSE));
322 }
323 
324 void
326 {
327  gint takane_latitude, takane_longitude;
328 
329  grn_obj_reinit(&context, &dest, GRN_DB_WGS84_GEO_POINT, 0);
330  cast_text("35.6954581363924x139.564207350021");
331  GRN_GEO_POINT_VALUE(&dest, takane_latitude, takane_longitude);
332  cut_assert_equal_int(128503649, takane_latitude);
333  cut_assert_equal_int(502431146, takane_longitude);
334 }
335 
336 void
338 {
339  gint takane_latitude, takane_longitude;
340 
341  grn_obj_reinit(&context, &dest, GRN_DB_WGS84_GEO_POINT, 0);
342  cast_text("35.6954581363924,139.564207350021");
343  GRN_GEO_POINT_VALUE(&dest, takane_latitude, takane_longitude);
344  cut_assert_equal_int(128503649, takane_latitude);
345  cut_assert_equal_int(502431146, takane_longitude);
346 }
347 
348 void
350 {
351  grn_obj_reinit(&context, &dest, GRN_DB_WGS84_GEO_POINT, 0);
352  set_text("35.6954581363924?139.564207350021");
354  grn_obj_cast(&context, &src, &dest, FALSE));
355 }
356 
357 void
359 {
360  gint takane_latitude, takane_longitude;
361 
362  grn_obj_reinit(&context, &dest, GRN_DB_WGS84_GEO_POINT, 0);
363  cast_text("35.6954581363924x503802073");
364  GRN_GEO_POINT_VALUE(&dest, takane_latitude, takane_longitude);
365  cut_assert_equal_int(128503649, takane_latitude);
366  cut_assert_equal_int(503802073, takane_longitude);
367 }
368 
369 void
371 {
372  gint takane_latitude, takane_longitude;
373 
374  grn_obj_reinit(&context, &dest, GRN_DB_WGS84_GEO_POINT, 0);
375  cast_text("35.6954581363924,503802073");
376  GRN_GEO_POINT_VALUE(&dest, takane_latitude, takane_longitude);
377  cut_assert_equal_int(128503649, takane_latitude);
378  cut_assert_equal_int(503802073, takane_longitude);
379 }
380 
381 void
383 {
384  grn_obj_reinit(&context, &dest, GRN_DB_WGS84_GEO_POINT, 0);
385  set_text("35.6954581363924x503802073garbage");
387  grn_obj_cast(&context, &src, &dest, FALSE));
388 }
389 
390 void
392 {
393 #define ADD_DATA(label, expected, type, text) \
394  gcut_add_datum(label, \
395  "expected", G_TYPE_UINT, expected, \
396  "type", G_TYPE_UINT, type, \
397  "text", G_TYPE_STRING, text, \
398  NULL)
399 
400  ADD_DATA("not numeric", GRN_INVALID_ARGUMENT, GRN_DB_INT32, "not-numeric");
401 
402 #undef ADD_DATA
403 }
404 
405 void
406 test_text_error(gconstpointer data)
407 {
408  grn_obj_reinit(&context, &dest, gcut_data_get_uint(data, "type"), 0);
409  grn_obj_reinit(&context, &src, GRN_DB_TEXT, 0);
410  GRN_TEXT_PUTS(&context, &src, gcut_data_get_string(data, "text"));
411  grn_test_assert_equal_rc(gcut_data_get_uint(data, "expected"),
412  grn_obj_cast(&context, &src, &dest, GRN_FALSE));
413 }
414 
415 static void
416 set_bool(gboolean boolean)
417 {
418  grn_obj_reinit(&context, &src, GRN_DB_BOOL, 0);
419  GRN_BOOL_SET(&context, &src, boolean);
420 }
421 
422 static void
423 cast_bool(gboolean boolean)
424 {
425  set_bool(boolean);
426  grn_test_assert(grn_obj_cast(&context, &src, &dest, GRN_FALSE));
427 }
428 
429 void
431 {
432  grn_obj_reinit(&context, &dest, GRN_DB_BOOL, 0);
433  cast_bool(TRUE);
434  cut_assert_true(GRN_BOOL_VALUE(&dest));
435 }
436 
437 static void
438 set_int32(gint32 number)
439 {
440  grn_obj_reinit(&context, &src, GRN_DB_INT32, 0);
441  GRN_INT32_SET(&context, &src, number);
442 }
443 
444 static void
445 cast_int32(gint32 number)
446 {
447  set_int32(number);
448  grn_test_assert(grn_obj_cast(&context, &src, &dest, GRN_FALSE));
449 }
450 
451 void
453 {
454 #define ADD_DATA(label, expected, number) \
455  gcut_add_datum(label, \
456  "expected", G_TYPE_UINT, expected, \
457  "number", G_TYPE_INT, number, \
458  NULL)
459 
460  ADD_DATA("true", GRN_TRUE, 1);
461  ADD_DATA("false", GRN_FALSE, 0);
462  ADD_DATA("not zero", GRN_TRUE, 100);
463 
464 #undef ADD_DATA
465 }
466 
467 void
468 test_int32_to_bool(gconstpointer data)
469 {
470  grn_obj_reinit(&context, &dest, GRN_DB_BOOL, 0);
471  cast_int32(gcut_data_get_int(data, "number"));
472  cut_assert_equal_boolean(gcut_data_get_uint(data, "expected"),
473  GRN_BOOL_VALUE(&dest));
474 }
475 
476 void
478 {
479  grn_obj_reinit(&context, &dest, GRN_DB_INT8, 0);
480  cast_int32(-29);
481  cut_assert_equal_int(-29, GRN_INT8_VALUE(&dest));
482 }
483 
484 void
486 {
487  grn_obj_reinit(&context, &dest, GRN_DB_UINT8, 0);
488  cast_int32(29);
489  cut_assert_equal_uint(29, GRN_UINT8_VALUE(&dest));
490 }
491 
492 void
494 {
495  grn_obj_reinit(&context, &dest, GRN_DB_INT16, 0);
496  cast_int32(-2929);
497  cut_assert_equal_int(-2929, GRN_INT16_VALUE(&dest));
498 }
499 
500 void
502 {
503  grn_obj_reinit(&context, &dest, GRN_DB_UINT16, 0);
504  cast_int32(2929);
505  cut_assert_equal_uint(2929, GRN_UINT16_VALUE(&dest));
506 }
507 
508 void
510 {
511  grn_obj_reinit(&context, &dest, GRN_DB_INT32, 0);
512  cast_int32(-29292929);
513  cut_assert_equal_int(-29292929, GRN_INT32_VALUE(&dest));
514 }
515 
516 void
518 {
519  grn_obj_reinit(&context, &dest, GRN_DB_UINT32, 0);
520  cast_int32(29292929);
521  cut_assert_equal_uint(29292929, GRN_UINT32_VALUE(&dest));
522 }
523 
524 void
526 {
527  grn_obj_reinit(&context, &dest, GRN_DB_INT64, 0);
528  cast_int32(-29292929);
529  gcut_assert_equal_int64(G_GINT64_CONSTANT(-29292929),
530  GRN_INT64_VALUE(&dest));
531 }
532 
533 void
535 {
536  grn_obj_reinit(&context, &dest, GRN_DB_UINT64, 0);
537  cast_int32(29292929);
538  gcut_assert_equal_uint64(G_GUINT64_CONSTANT(29292929),
539  GRN_UINT64_VALUE(&dest));
540 }
541 
542 void
544 {
545  grn_obj_reinit(&context, &dest, GRN_DB_FLOAT, 0);
546  cast_int32(29);
547  cut_assert_equal_double(29, 0.1, GRN_FLOAT_VALUE(&dest));
548 }
549 
550 void
552 {
553  long long int sec, usec;
554 
555  grn_obj_reinit(&context, &dest, GRN_DB_TIME, 0);
556  cast_int32(1259009530);
557  GRN_TIME_UNPACK(GRN_TIME_VALUE(&dest), sec, usec);
558  cut_assert_equal_int(1259009530, sec);
559  cut_assert_equal_int(0, usec);
560 }
561 
562 void
564 {
565  grn_obj_reinit(&context, &dest, GRN_DB_TEXT, 0);
566  cast_int32(2929);
567  cut_assert_equal_string("2929", GRN_TEXT_VALUE(&dest));
568 }
569 
570 void
572 {
573  grn_obj_reinit(&context, &dest, GRN_DB_WGS84_GEO_POINT, 0);
574  set_int32(0);
576  grn_obj_cast(&context, &src, &dest, GRN_FALSE));
577 }
578 
579 void
581 {
582  grn_obj_reinit(&context, &dest, GRN_DB_WGS84_GEO_POINT, 0);
583  set_int32(1);
585  grn_obj_cast(&context, &src, &dest, GRN_FALSE));
586 }
587 
588 static void
589 cast_uint32(guint32 number)
590 {
591  grn_obj_reinit(&context, &src, GRN_DB_UINT32, 0);
592  GRN_UINT32_SET(&context, &src, number);
593  grn_test_assert(grn_obj_cast(&context, &src, &dest, GRN_FALSE));
594 }
595 
596 void
598 {
599 #define ADD_DATA(label, expected, number) \
600  gcut_add_datum(label, \
601  "expected", G_TYPE_UINT, expected, \
602  "number", G_TYPE_UINT, number, \
603  NULL)
604 
605  ADD_DATA("true", GRN_TRUE, 1);
606  ADD_DATA("false", GRN_FALSE, 0);
607  ADD_DATA("not zero", GRN_TRUE, 100);
608 
609 #undef ADD_DATA
610 }
611 
612 void
613 test_uint32_to_bool(gconstpointer data)
614 {
615  grn_obj_reinit(&context, &dest, GRN_DB_BOOL, 0);
616  cast_uint32(gcut_data_get_uint(data, "number"));
617  cut_assert_equal_boolean(gcut_data_get_uint(data, "expected"),
618  GRN_BOOL_VALUE(&dest));
619 }
620 
621 void
623 {
624  grn_obj_reinit(&context, &dest, GRN_DB_INT8, 0);
625  cast_uint32(29);
626  cut_assert_equal_int(29, GRN_UINT8_VALUE(&dest));
627 }
628 
629 void
631 {
632  grn_obj_reinit(&context, &dest, GRN_DB_UINT8, 0);
633  cast_uint32(29);
634  cut_assert_equal_uint(29, GRN_UINT8_VALUE(&dest));
635 }
636 
637 void
639 {
640  grn_obj_reinit(&context, &dest, GRN_DB_INT16, 0);
641  cast_uint32(2929);
642  cut_assert_equal_int(2929, GRN_UINT16_VALUE(&dest));
643 }
644 
645 void
647 {
648  grn_obj_reinit(&context, &dest, GRN_DB_UINT16, 0);
649  cast_uint32(2929);
650  cut_assert_equal_uint(2929, GRN_UINT16_VALUE(&dest));
651 }
652 
653 void
655 {
656  grn_obj_reinit(&context, &dest, GRN_DB_UINT32, 0);
657  cast_uint32(29292929);
658  cut_assert_equal_int(29292929, GRN_INT32_VALUE(&dest));
659 }
660 
661 void
663 {
664  grn_obj_reinit(&context, &dest, GRN_DB_UINT32, 0);
665  cast_uint32(29292929);
666  cut_assert_equal_uint(29292929, GRN_UINT32_VALUE(&dest));
667 }
668 
669 void
671 {
672  grn_obj_reinit(&context, &dest, GRN_DB_INT64, 0);
673  cast_uint32(29292929);
674  gcut_assert_equal_int64(G_GINT64_CONSTANT(29292929),
675  GRN_INT64_VALUE(&dest));
676 }
677 
678 void
680 {
681  grn_obj_reinit(&context, &dest, GRN_DB_UINT64, 0);
682  cast_uint32(29292929);
683  gcut_assert_equal_uint64(G_GUINT64_CONSTANT(29292929),
684  GRN_UINT64_VALUE(&dest));
685 }
686 
687 void
689 {
690  grn_obj_reinit(&context, &dest, GRN_DB_FLOAT, 0);
691  cast_uint32(29);
692  cut_assert_equal_double(29, 0.1, GRN_FLOAT_VALUE(&dest));
693 }
694 
695 void
697 {
698  long long int sec, usec;
699 
700  grn_obj_reinit(&context, &dest, GRN_DB_TIME, 0);
701  cast_uint32(1259009530);
702  GRN_TIME_UNPACK(GRN_TIME_VALUE(&dest), sec, usec);
703  cut_assert_equal_int(1259009530, sec);
704  cut_assert_equal_int(0, usec);
705 }
706 
707 void
709 {
710  grn_obj_reinit(&context, &dest, GRN_DB_TEXT, 0);
711  cast_uint32(2929);
712  cut_assert_equal_string("2929", GRN_TEXT_VALUE(&dest));
713 }
714 
715 static void
716 cast_int64(gint64 number)
717 {
718  grn_obj_reinit(&context, &src, GRN_DB_INT64, 0);
719  GRN_INT64_SET(&context, &src, number);
720  grn_test_assert(grn_obj_cast(&context, &src, &dest, GRN_FALSE));
721 }
722 
723 void
725 {
726 #define ADD_DATA(label, expected, number) \
727  gcut_add_datum(label, \
728  "expected", G_TYPE_UINT, expected, \
729  "number", G_TYPE_INT, number, \
730  NULL)
731 
732  ADD_DATA("true", GRN_TRUE, 1);
733  ADD_DATA("false", GRN_FALSE, 0);
734  ADD_DATA("not zero", GRN_TRUE, 100);
735 
736 #undef ADD_DATA
737 }
738 
739 void
740 test_int64_to_bool(gconstpointer data)
741 {
742  grn_obj_reinit(&context, &dest, GRN_DB_BOOL, 0);
743  cast_int64(gcut_data_get_int(data, "number"));
744  cut_assert_equal_boolean(gcut_data_get_uint(data, "expected"),
745  GRN_BOOL_VALUE(&dest));
746 }
747 
748 void
750 {
751  grn_obj_reinit(&context, &dest, GRN_DB_INT8, 0);
752  cast_int64(-29);
753  cut_assert_equal_int(-29, GRN_INT8_VALUE(&dest));
754 }
755 
756 void
758 {
759  grn_obj_reinit(&context, &dest, GRN_DB_UINT8, 0);
760  cast_int64(29);
761  cut_assert_equal_uint(29, GRN_UINT8_VALUE(&dest));
762 }
763 
764 void
766 {
767  grn_obj_reinit(&context, &dest, GRN_DB_INT16, 0);
768  cast_int64(-2929);
769  cut_assert_equal_int(-2929, GRN_INT16_VALUE(&dest));
770 }
771 
772 void
774 {
775  grn_obj_reinit(&context, &dest, GRN_DB_UINT16, 0);
776  cast_int64(2929);
777  cut_assert_equal_uint(2929, GRN_UINT16_VALUE(&dest));
778 }
779 
780 void
782 {
783  grn_obj_reinit(&context, &dest, GRN_DB_INT32, 0);
784  cast_int64(-29292929);
785  cut_assert_equal_int(-29292929, GRN_INT32_VALUE(&dest));
786 }
787 
788 void
790 {
791  grn_obj_reinit(&context, &dest, GRN_DB_UINT32, 0);
792  cast_int64(29292929);
793  cut_assert_equal_uint(29292929, GRN_UINT32_VALUE(&dest));
794 }
795 
796 void
798 {
799  grn_obj_reinit(&context, &dest, GRN_DB_INT64, 0);
800  cast_int64(-29292929);
801  gcut_assert_equal_int64(G_GINT64_CONSTANT(-29292929),
802  GRN_INT64_VALUE(&dest));
803 }
804 
805 void
807 {
808  grn_obj_reinit(&context, &dest, GRN_DB_UINT64, 0);
809  cast_int64(G_GINT64_CONSTANT(2929292929));
810  gcut_assert_equal_uint64(G_GUINT64_CONSTANT(2929292929),
811  GRN_UINT64_VALUE(&dest));
812 }
813 
814 void
816 {
817  grn_obj_reinit(&context, &dest, GRN_DB_FLOAT, 0);
818  cast_int64(29);
819  cut_assert_equal_double(29, 0.1, GRN_FLOAT_VALUE(&dest));
820 }
821 
822 void
824 {
825  long long int sec, usec;
826 
827  grn_obj_reinit(&context, &dest, GRN_DB_TIME, 0);
828  cast_int64(1259009530);
829  GRN_TIME_UNPACK(GRN_TIME_VALUE(&dest), sec, usec);
830  cut_assert_equal_int(1259009530, sec);
831  cut_assert_equal_int(0, usec);
832 }
833 
834 void
836 {
837  grn_obj_reinit(&context, &dest, GRN_DB_TEXT, 0);
838  cast_int64(2929);
839  cut_assert_equal_string("2929", GRN_TEXT_VALUE(&dest));
840 }
841 
842 static void
843 cast_uint64(guint64 number)
844 {
845  grn_obj_reinit(&context, &src, GRN_DB_UINT64, 0);
846  GRN_UINT64_SET(&context, &src, number);
847  grn_test_assert(grn_obj_cast(&context, &src, &dest, GRN_FALSE));
848 }
849 
850 void
852 {
853 #define ADD_DATA(label, expected, number) \
854  gcut_add_datum(label, \
855  "expected", G_TYPE_UINT, expected, \
856  "number", G_TYPE_UINT, number, \
857  NULL)
858 
859  ADD_DATA("true", GRN_TRUE, 1);
860  ADD_DATA("false", GRN_FALSE, 0);
861  ADD_DATA("not zero", GRN_TRUE, 100);
862 
863 #undef ADD_DATA
864 }
865 
866 void
867 test_uint64_to_bool(gconstpointer data)
868 {
869  grn_obj_reinit(&context, &dest, GRN_DB_BOOL, 0);
870  cast_uint64(gcut_data_get_uint(data, "number"));
871  cut_assert_equal_boolean(gcut_data_get_uint(data, "expected"),
872  GRN_BOOL_VALUE(&dest));
873 }
874 
875 void
877 {
878  grn_obj_reinit(&context, &dest, GRN_DB_INT8, 0);
879  cast_uint64(29);
880  cut_assert_equal_int(29, GRN_UINT8_VALUE(&dest));
881 }
882 
883 void
885 {
886  grn_obj_reinit(&context, &dest, GRN_DB_UINT8, 0);
887  cast_uint64(29);
888  cut_assert_equal_uint(29, GRN_UINT8_VALUE(&dest));
889 }
890 
891 void
893 {
894  grn_obj_reinit(&context, &dest, GRN_DB_INT16, 0);
895  cast_uint64(2929);
896  cut_assert_equal_int(2929, GRN_UINT16_VALUE(&dest));
897 }
898 
899 void
901 {
902  grn_obj_reinit(&context, &dest, GRN_DB_UINT16, 0);
903  cast_uint64(2929);
904  cut_assert_equal_uint(2929, GRN_UINT16_VALUE(&dest));
905 }
906 
907 void
909 {
910  grn_obj_reinit(&context, &dest, GRN_DB_UINT32, 0);
911  cast_uint64(29292929);
912  cut_assert_equal_int(29292929, GRN_INT32_VALUE(&dest));
913 }
914 
915 void
917 {
918  grn_obj_reinit(&context, &dest, GRN_DB_UINT32, 0);
919  cast_uint64(29292929);
920  cut_assert_equal_uint(29292929, GRN_UINT32_VALUE(&dest));
921 }
922 
923 void
925 {
926  grn_obj_reinit(&context, &dest, GRN_DB_INT64, 0);
927  cast_uint64(G_GUINT64_CONSTANT(2929292929));
928  gcut_assert_equal_int64(G_GINT64_CONSTANT(2929292929),
929  GRN_INT64_VALUE(&dest));
930 }
931 
932 void
934 {
935  grn_obj_reinit(&context, &dest, GRN_DB_UINT64, 0);
936  cast_uint64(G_GUINT64_CONSTANT(2929292929));
937  gcut_assert_equal_uint64(G_GUINT64_CONSTANT(2929292929),
938  GRN_UINT64_VALUE(&dest));
939 }
940 
941 void
943 {
944  grn_obj_reinit(&context, &dest, GRN_DB_FLOAT, 0);
945  cast_uint64(29);
946  cut_assert_equal_double(29, 0.1, GRN_FLOAT_VALUE(&dest));
947 }
948 
949 void
951 {
952  long long int sec, usec;
953 
954  grn_obj_reinit(&context, &dest, GRN_DB_TIME, 0);
955  cast_uint64(1259009530);
956  GRN_TIME_UNPACK(GRN_TIME_VALUE(&dest), sec, usec);
957  cut_assert_equal_int(1259009530, sec);
958  cut_assert_equal_int(0, usec);
959 }
960 
961 void
963 {
964  grn_obj_reinit(&context, &dest, GRN_DB_TEXT, 0);
965  cast_uint64(2929);
966  cut_assert_equal_string("2929", GRN_TEXT_VALUE(&dest));
967 }
968 
969 void
971 {
972  gint takane_latitude, takane_longitude;
973  gint takane_latitude_in_tokyo_geodetic_system = 130183139;
974  gint takane_longitude_in_tokyo_geodetic_system = 503813760;
975 
976  grn_obj_reinit(&context, &src, GRN_DB_TOKYO_GEO_POINT, 0);
977  GRN_GEO_POINT_SET(&context, &src,
978  takane_latitude_in_tokyo_geodetic_system,
979  takane_longitude_in_tokyo_geodetic_system);
980 
981  grn_obj_reinit(&context, &dest, GRN_DB_TOKYO_GEO_POINT, 0);
982  grn_test_assert(grn_obj_cast(&context, &src, &dest, GRN_FALSE));
983  GRN_GEO_POINT_VALUE(&dest, takane_latitude, takane_longitude);
984  cut_assert_equal_int(takane_latitude_in_tokyo_geodetic_system,
985  takane_latitude);
986  cut_assert_equal_int(takane_longitude_in_tokyo_geodetic_system,
987  takane_longitude);
988 }
989 
990 void
992 {
993  gint takane_latitude, takane_longitude;
994  gint takane_latitude_in_tokyo_geodetic_system = 130183139;
995  gint takane_longitude_in_tokyo_geodetic_system = 503813760;
996  gint takane_latitude_in_wgs84 = 130194581;
997  gint takane_longitude_in_wgs84 = 503802072;
998 
999  grn_obj_reinit(&context, &src, GRN_DB_TOKYO_GEO_POINT, 0);
1000  GRN_GEO_POINT_SET(&context, &src,
1001  takane_latitude_in_tokyo_geodetic_system,
1002  takane_longitude_in_tokyo_geodetic_system);
1003 
1004  grn_obj_reinit(&context, &dest, GRN_DB_WGS84_GEO_POINT, 0);
1005  grn_test_assert(grn_obj_cast(&context, &src, &dest, GRN_FALSE));
1006  GRN_GEO_POINT_VALUE(&dest, takane_latitude, takane_longitude);
1007  cut_assert_equal_int(takane_latitude_in_wgs84,
1008  takane_latitude);
1009  cut_assert_equal_int(takane_longitude_in_wgs84,
1010  takane_longitude);
1011 }
1012 
1013 void
1015 {
1016  gint takane_latitude, takane_longitude;
1017  gint takane_latitude_in_wgs84 = 130194581;
1018  gint takane_longitude_in_wgs84 = 503802073;
1019 
1020  grn_obj_reinit(&context, &src, GRN_DB_WGS84_GEO_POINT, 0);
1021  GRN_GEO_POINT_SET(&context, &src,
1022  takane_latitude_in_wgs84,
1023  takane_longitude_in_wgs84);
1024 
1025  grn_obj_reinit(&context, &dest, GRN_DB_WGS84_GEO_POINT, 0);
1026  grn_test_assert(grn_obj_cast(&context, &src, &dest, GRN_FALSE));
1027  GRN_GEO_POINT_VALUE(&dest, takane_latitude, takane_longitude);
1028  cut_assert_equal_int(takane_latitude_in_wgs84,
1029  takane_latitude);
1030  cut_assert_equal_int(takane_longitude_in_wgs84,
1031  takane_longitude);
1032 }
1033 
1034 void
1036 {
1037  gint takane_latitude, takane_longitude;
1038  gint takane_latitude_in_wgs84 = 130194581;
1039  gint takane_longitude_in_wgs84 = 503802073;
1040  gint takane_latitude_in_tokyo_geodetic_system = 130183140;
1041  gint takane_longitude_in_tokyo_geodetic_system = 503813761;
1042 
1043  grn_obj_reinit(&context, &src, GRN_DB_WGS84_GEO_POINT, 0);
1044  GRN_GEO_POINT_SET(&context, &src,
1045  takane_latitude_in_wgs84,
1046  takane_longitude_in_wgs84);
1047 
1048  grn_obj_reinit(&context, &dest, GRN_DB_TOKYO_GEO_POINT, 0);
1049  grn_test_assert(grn_obj_cast(&context, &src, &dest, GRN_FALSE));
1050  GRN_GEO_POINT_VALUE(&dest, takane_latitude, takane_longitude);
1051  cut_assert_equal_int(takane_latitude_in_tokyo_geodetic_system,
1052  takane_latitude);
1053  cut_assert_equal_int(takane_longitude_in_tokyo_geodetic_system,
1054  takane_longitude);
1055 }