25 #include "../lib/grn-assertions.h"
27 static gchar *tmp_directory;
32 static grn_obj textbuf, intbuf, floatbuf, timebuf;
62 g_free(tmp_directory);
68 cut_remove_path(tmp_directory, NULL);
69 g_mkdir_with_parents(tmp_directory, 0700);
70 path = g_build_filename(tmp_directory,
"text-expr", NULL);
98 cut_remove_path(tmp_directory, NULL);
102 #define PARSE(expr, str, flags) \
103 grn_test_assert(grn_expr_parse(&context, (expr), (str), strlen(str), \
104 body, GRN_OP_MATCH, GRN_OP_AND, flags))
106 static grn_obj *docs, *terms, *body, *created_at, *index_body;
107 static grn_obj *size, *size_in_string, *size_in_float;
110 insert_document(
const gchar *body_content)
112 uint32_t s = (uint32_t)strlen(body_content);
114 const gchar *size_string;
125 size_string = cut_take_printf(
"%u", s);
126 GRN_TEXT_SET(&context, &textbuf, size_string, strlen(size_string));
148 #define INSERT_DOCUMENT(body) \
149 cut_trace(insert_document(body))
152 create_documents_table(
void)
156 cut_assert_not_null(docs);
161 cut_assert_not_null(size);
166 cut_assert_not_null(size_in_string);
171 cut_assert_not_null(size_in_float);
176 cut_assert_not_null(created_at);
181 cut_assert_not_null(body);
185 create_terms_table(
void)
190 cut_assert_not_null(terms);
197 cut_assert_not_null(index_body);
221 create_documents_table();
222 create_terms_table();
226 #define ADD_DATUM(label, expected_keys, query) \
227 gcut_add_datum(label, \
228 "expected_keys", G_TYPE_POINTER, expected_keys, \
229 gcut_list_string_free, \
230 "query", G_TYPE_STRING, query, \
234 data_logic_operator_and(
void)
237 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
240 gcut_list_string_new(NULL, NULL),
244 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
247 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
248 "size <= 9 && -0.1");
250 gcut_list_string_new(NULL, NULL),
254 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
255 "size <= 9 && \"abc\"");
257 gcut_list_string_new(NULL, NULL),
258 "size <= 9 && \"\"");
262 data_logic_operator_or(
void)
265 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
266 "size <= 9 && (size == 4 || 1)");
268 gcut_list_string_new(
"hoge", NULL),
269 "size <= 9 && (size == 4 || 0)");
272 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
273 "size <= 9 && (size == 4 || 0.1)");
275 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
276 "size <= 9 && (size == 4 || -0.1)");
278 gcut_list_string_new(
"hoge", NULL),
279 "size <= 9 && (size == 4 || 0.0)");
282 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
283 "size <= 9 && (size == 4 || \"abc\")");
285 gcut_list_string_new(
"hoge", NULL),
286 "size <= 9 && (size == 4 || \"\")");
292 data_logic_operator_and();
293 data_logic_operator_or();
306 cut_assert_not_null(expr);
308 cut_assert_not_null(v);
311 gcut_data_get_string(data,
"query"),
315 cut_assert_not_null(res);
317 gcut_data_get_pointer(data,
"expected_keys"),
325 #define ADD_DATUM(label, expected_keys, query) \
326 gcut_add_datum(label, \
327 "expected_keys", G_TYPE_POINTER, expected_keys, \
328 gcut_list_string_free, \
329 "query", G_TYPE_STRING, query, \
333 gcut_list_string_new(
"hoge", NULL),
336 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
339 gcut_list_string_new(
"moge hoge moge moge moge",
340 "poyo moge hoge moge moge moge",
344 gcut_list_string_new(
"hoge moge moge moge",
345 "moge hoge fuga fuga",
346 "moge hoge moge moge moge",
347 "poyo moge hoge moge moge moge",
362 cut_assert_not_null(expr);
364 cut_assert_not_null(v);
367 gcut_data_get_string(data,
"query"),
371 cut_assert_not_null(res);
373 gcut_data_get_pointer(data,
"expected_keys"),
381 #define ADD_DATUM(label, message, query) \
382 gcut_add_datum(label, \
383 "message", G_TYPE_STRING, message, \
384 "query", G_TYPE_STRING, query, \
388 cut_take_printf(
"Syntax error! (nonexistent == 100)"),
389 "nonexistent == 100");
403 query = gcut_data_get_string(data,
"query");
409 gcut_data_get_string(data,
"message"),
413 #define ADD_DATUM(label, expected_keys, query) \
414 gcut_add_datum(label, \
415 "expected_keys", G_TYPE_POINTER, expected_keys, \
416 gcut_list_string_free, \
417 "query", G_TYPE_STRING, query, \
421 data_arithmetic_operator_assign(
void)
424 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
425 "size <= 9 && (size = 10) && size == 10");
427 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
428 "size <= 9 && ((size = 10.1) || 1) && size == 10");
430 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
431 "size <= 9 && ((size = \"10\") || 1) && size == 10");
434 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
435 "size_in_float <= 9.1 && "
436 "((size_in_float = 10.1) || 1) && "
437 "size_in_float == 10.1");
439 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
440 "size_in_float <= 9.1 && "
441 "(size_in_float = 10) && "
442 "size_in_float == 10");
445 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
446 "size_in_string <= 9 && "
447 "((size_in_string = \"10\") || 1) && "
448 "size_in_string == \"10\"");
452 data_arithmetic_operator_star_assign(
void)
455 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
456 "size <= 9 && (size *= 10) && size == 90");
458 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
459 "size <= 9 && ((size *= 10.1) || 1) && size == 90");
461 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
462 "size <= 9 && ((size *= \"10\") || 1) && size == 90");
465 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
466 "size_in_float <= 9.1 && "
467 "((size_in_float *= 10.1) || 1) && "
468 "90 <= size_in_float && "
469 "size_in_float <= 92");
471 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
472 "size_in_float <= 9.1 && "
473 "((size_in_float *= 10) || 1) && "
474 "89 <= size_in_float && "
475 "size_in_float <= 92");
477 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
478 "size_in_float <= 9.1 && "
479 "((size_in_float *= \"10.1\") || 1) && "
480 "90 <= size_in_float && "
481 "size_in_float <= 92");
485 data_arithmetic_operator_slash_assign(
void)
488 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
489 "size <= 9 && (size /= 5) && size == 1");
491 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
492 "size <= 9 && ((size /= 5.1) || 1) && size == 1");
494 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
495 "size <= 9 && ((size /= \"5\") || 1) && size == 1");
498 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
499 "size_in_float <= 9.1 && "
500 "((size_in_float /= 5.1) || 1) && "
501 "1 < size_in_float && size_in_float < 2");
503 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
504 "size_in_float <= 9.1 && "
505 "((size_in_float /= 5) || 1) && "
506 "1 < size_in_float && size_in_float < 2");
508 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
509 "size_in_float <= 9.1 && "
510 "((size_in_float /= \"5.1\") || 1) && "
511 "1 < size_in_float && size_in_float < 2");
515 data_arithmetic_operator_mod_assign(
void)
518 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
519 "size <= 9 && (size %= 4) && size == 1");
521 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
522 "size <= 9 && ((size %= 4.1) || 1) && size == 1");
524 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
525 "size <= 9 && ((size %= \"4\") || 1) && size == 1");
528 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
529 "size_in_float <= 9.1 && "
530 "((size_in_float %= 4.1) || 1) && "
531 "0 < size_in_float && size_in_float < 1.1");
533 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
534 "size_in_float <= 9.1 && "
535 "((size_in_float %= 4) || 1) && "
536 "0 < size_in_float && size_in_float < 1.1");
538 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
539 "size_in_float <= 9.1 && "
540 "((size_in_float %= \"4.1\") || 1) && "
541 "0 < size_in_float && size_in_float < 1.1");
545 data_arithmetic_operator_plus_assign(
void)
548 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
549 "size <= 9 && (size += 4) && size == 13");
551 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
552 "size <= 9 && ((size += 4.1) || 1) && size == 13");
554 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
555 "size <= 9 && ((size += \"4\") || 1) && size == 13");
558 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
559 "size_in_float <= 9.1 && "
560 "((size_in_float += 4.1) || 1) && "
561 "13 < size_in_float && size_in_float < 14");
563 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
564 "size_in_float <= 9.1 && "
565 "((size_in_float += 4) || 1) && "
566 "12.9 < size_in_float && size_in_float < 14.0");
568 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
569 "size_in_float <= 9.1 && "
570 "((size_in_float += \"4.1\") || 1) && "
571 "13 < size_in_float && size_in_float < 14");
575 data_arithmetic_operator_minus_assign(
void)
578 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
579 "size <= 9 && (size -= 4) && size == 5");
581 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
582 "size <= 9 && ((size -= 4.1) || 1) && size == 5");
584 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
585 "size <= 9 && ((size -= \"4\") || 1) && size == 5");
588 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
589 "size <= 9 && ((size -= (3 + 1)) || 1) && size == 5");
592 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
593 "size_in_float <= 9.1 && "
594 "((size_in_float -= 4.1) || 1) && "
595 "4.8 < size_in_float && size_in_float < 5");
597 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
598 "size_in_float <= 9.1 && "
599 "((size_in_float -= 4) || 1) && "
600 "4.8 < size_in_float && size_in_float < 5.1");
602 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
603 "size_in_float <= 9.1 && "
604 "((size_in_float -= \"4.1\") || 1) && "
605 "4.8 < size_in_float && size_in_float < 5");
609 data_arithmetic_operator_shift_l_assign(
void)
612 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
613 "size <= 9 && (size <<= 1) && size == 18");
615 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
616 "size <= 9 && ((size <<= 1.1) || 1) && size == 18");
618 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
619 "size <= 9 && ((size <<= \"1\") || 1) && size == 18");
622 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
623 "size_in_float <= 9.1 && "
624 "((size_in_float <<= 1.1) || 1) && "
625 "17.9 < size_in_float && size_in_float < 19");
627 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
628 "size_in_float <= 9.1 && "
629 "((size_in_float <<= 1) || 1) && "
630 "17.9 < size_in_float && size_in_float < 19");
632 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
633 "size_in_float <= 9.1 && "
634 "((size_in_float <<= \"1.1\") || 1) && "
635 "17.9 < size_in_float && size_in_float < 19");
639 data_arithmetic_operator_shift_r_assign(
void)
642 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
643 "size <= 9 && (size >>= 1) && size == 4");
645 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
646 "size <= 9 && ((size >>= 1.1) || 1) && size == 4");
648 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
649 "size <= 9 && ((size >>= \"1\") || 1) && size == 4");
652 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
653 "size_in_float <= 9.1 && "
654 "((size_in_float >>= 1.1) || 1) && "
655 "3.9 < size_in_float && size_in_float < 5");
657 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
658 "size_in_float <= 9.1 && "
659 "((size_in_float >>= 1) || 1) && "
660 "3.9 < size_in_float && size_in_float < 5");
662 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
663 "size_in_float <= 9.1 && "
664 "((size_in_float >>= \"1.1\") || 1) && "
665 "3.9 < size_in_float && size_in_float < 5");
669 data_arithmetic_operator_shift_rr_assign(
void)
672 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
673 "size <= 9 && (size >>>= 1) && size == 4");
675 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
676 "size <= 9 && ((size >>>= 1.1) || 1) && size == 4");
678 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
679 "size <= 9 && ((size >>>= \"1\") || 1) && size == 4");
682 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
683 "size_in_float <= 9.1 && "
684 "((size_in_float >>>= 1.1) || 1) && "
685 "3.9 < size_in_float && size_in_float < 5");
687 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
688 "size_in_float <= 9.1 && "
689 "((size_in_float >>>= 1) || 1) && "
690 "3.9 < size_in_float && size_in_float < 5");
692 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
693 "size_in_float <= 9.1 && "
694 "((size_in_float >>>= \"1.1\") || 1) && "
695 "3.9 < size_in_float && size_in_float < 5");
699 data_arithmetic_operator_and_assign(
void)
702 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
703 "size <= 9 && (size &= 1) && size == 1");
705 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
706 "size <= 9 && ((size &= 1.1) || 1) && size == 1");
708 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
709 "size <= 9 && ((size &= \"1\") || 1) && size == 1");
712 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
713 "size_in_float <= 9.1 && "
714 "((size_in_float &= 1.1) || 1) && "
715 "0.9 < size_in_float && size_in_float < 1.1");
717 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
718 "size_in_float <= 9.1 && "
719 "((size_in_float &= 1) || 1) && "
720 "0.9 < size_in_float && size_in_float < 1.1");
722 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
723 "size_in_float <= 9.1 && "
724 "((size_in_float &= \"1.1\") || 1) && "
725 "0.9 < size_in_float && size_in_float < 1.1");
729 data_arithmetic_operator_xor_assign(
void)
732 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
733 "size <= 9 && (size ^= 3) && size == 10");
735 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
736 "size <= 9 && ((size ^= 3.1) || 1) && size == 10");
738 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
739 "size <= 9 && ((size ^= \"3\") || 1) && size == 10");
742 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
743 "size_in_float <= 9.1 && "
744 "((size_in_float ^= 3.1) || 1) && "
745 "9.9 < size_in_float && size_in_float < 10.1");
747 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
748 "size_in_float <= 9.1 && "
749 "((size_in_float ^= 3) || 1) && "
750 "9.9 < size_in_float && size_in_float < 10.1");
752 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
753 "size_in_float <= 9.1 && "
754 "((size_in_float ^= \"3.1\") || 1) && "
755 "9.9 < size_in_float && size_in_float < 10.1");
759 data_arithmetic_operator_or_assign(
void)
762 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
763 "size <= 9 && (size |= 3) && size == 11");
765 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
766 "size <= 9 && ((size |= 3.1) || 1) && size == 11");
768 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
769 "size <= 9 && ((size |= \"3\") || 1) && size == 11");
772 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
773 "size_in_float <= 9.1 && "
774 "((size_in_float |= 3.1) || 1) && "
775 "10.9 < size_in_float && size_in_float < 11.1");
777 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
778 "size_in_float <= 9.1 && "
779 "((size_in_float |= 3) || 1) && "
780 "10.9 < size_in_float && size_in_float < 11.1");
782 gcut_list_string_new(
"fuga fuga",
"hoge hoge", NULL),
783 "size_in_float <= 9.1 && "
784 "((size_in_float |= \"3.1\") || 1) && "
785 "10.9 < size_in_float && size_in_float < 11.1");
789 data_arithmetic_operator_bitwise_or(
void)
792 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
795 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
796 "size <= (-8 | 1) + 16");
798 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
799 "size <= (8.1 | 1)");
801 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
802 "size <= (\"8\" | 1)");
804 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
805 "size <= (\"abc\" | 1) + 9");
809 data_arithmetic_operator_bitwise_xor(
void)
812 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
813 "size <= (24 ^ 17)");
815 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
816 "size <= (-24 ^ 17) + 16");
818 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
819 "size <= (24.1 ^ 17)");
821 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
822 "size <= (\"24\" ^ 17)");
824 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
825 "size <= (\"abc\" ^ 1) + 9");
829 data_arithmetic_operator_bitwise_and(
void)
832 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
833 "size <= (25 & 41)");
835 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
836 "size <= (-33 & 41)");
838 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
839 "size <= (25.3 & 41)");
841 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
842 "size <= (\"25\" & 41)");
844 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
845 "size <= (\"abc\" & 41) + 9");
849 data_arithmetic_operator_bitwise_not(
void)
852 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
855 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
858 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
859 "size <= ~9.1 + 19");
861 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
862 "size <= ~\"9\" + 19");
864 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
865 "size <= ~\"abc\" + 10");
869 data_arithmetic_operator_shift_l(
void)
872 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
873 "size <= ((2 << 2) + 1)");
875 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
876 "size <= ((2.1 << 2.1) + 1)");
877 ADD_DATUM(
"integer-string << integer-string",
878 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
879 "size <= ((\"2\" << \"2\") + 1)");
881 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
882 "size <= ((\"abc\" << \"2\") + 9)");
884 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
885 "size <= ((\"2\" << \"abc\") + 7)");
889 data_arithmetic_operator_shift_r(
void)
892 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
893 "size <= ((32 >> 3) + 5)");
895 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
896 "size <= ((32.1 >> 3.1) + 5)");
897 ADD_DATUM(
"integer-string >> integer-string",
898 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
899 "size <= ((\"32\" >> \"3\") + 5)");
901 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
902 "size <= ((\"abc\" >> \"2\") + 9)");
904 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
905 "size <= ((\"32\" >> \"abc\") - 23)");
907 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
908 "size <= ((-32 >> 1) + 16 + 9)");
912 data_arithmetic_operator_shift_rr(
void)
915 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
916 "size <= ((32 >>> 3) + 5)");
918 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
919 "size <= ((32.1 >>> 3.1) + 5)");
920 ADD_DATUM(
"integer-string >>> integer-string",
921 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
922 "size <= ((\"32\" >>> \"3\") + 5)");
924 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
925 "size <= ((\"abc\" >>> \"2\") + 9)");
927 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
928 "size <= ((\"32\" >>> \"abc\") - 23)");
930 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
931 cut_take_printf(
"size <= ((-32 >>> 1) - %d + 9)",
936 data_arithmetic_operator_plus(
void)
939 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
942 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
945 gcut_list_string_new(
"fuga fuga", NULL),
946 "body == \"fuga \" + \"fuga\"");
948 gcut_list_string_new(
"nick NICK 29", NULL),
949 "body == \"nick NICK \" + 29");
951 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
952 "size <= 4 + \"5\"");
954 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
955 "size <= 4 + 5.0001");
959 data_arithmetic_operator_minus(
void)
962 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
965 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
966 cut_take_printf(
"size <= "
967 "-%" G_GINT64_FORMAT
" + %" G_GINT64_FORMAT,
968 ((gint64)G_MAXINT32) + 1,
969 ((gint64)G_MAXINT32) + 1 + 9));
971 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
972 cut_take_printf(
"size <= "
973 "-%" G_GINT64_FORMAT
" + %" G_GINT64_FORMAT,
974 ((gint64)G_MAXINT32) + 2,
975 ((gint64)G_MAXINT32) + 2 + 9));
977 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
978 cut_take_printf(
"size <= "
979 "-%" G_GINT64_FORMAT
" + "
980 "%" G_GINT64_FORMAT
" + 9",
981 G_MAXINT64 / 2, G_MAXINT64 / 2));
983 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
984 cut_take_printf(
"size <= "
985 "-%" G_GINT64_FORMAT
" + "
986 "%" G_GINT64_FORMAT
" + 100 + 9",
990 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
991 cut_take_printf(
"size <= "
992 "-%" G_GUINT64_FORMAT
" + "
993 "%" G_GUINT64_FORMAT
" + "
995 ((guint64)(G_MAXINT64)) + 1,
996 ((guint64)(G_MAXINT64)) + 1));
998 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
999 "size <= -5.9 + 14.9");
1002 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
1005 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
1006 "size <= 14 - \"5\"");
1008 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
1009 "size <= 14.1 - 5");
1012 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
1013 "size <= (-size + size + 9)");
1018 data_arithmetic_operator_star(
void)
1021 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
1024 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
1025 "size <= 3 * \"3\"");
1027 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
1032 data_arithmetic_operator_slash(
void)
1035 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
1038 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
1039 "size <= 27 / \"3\"");
1041 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
1042 "size <= 27.1 / 3");
1046 data_arithmetic_operator_mod(
void)
1049 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
1052 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
1053 "size <= 19 % \"10\"");
1055 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
1056 "size <= 19.1 % 10");
1058 gcut_list_string_new(
"fuga fuga",
"hoge",
"hoge hoge", NULL),
1059 "size <= 19.1 % \"9.9\"");
1063 data_arithmetic_operator_incr(
void)
1065 int time_at_2009_12_2_15_16_0 = 1259734560;
1068 gcut_list_string_new(
"hoge", NULL),
1069 "++size == 5 && size == 5");
1071 gcut_list_string_new(
"hoge", NULL),
1072 "++size_in_float == 5 && size_in_float == 5");
1074 gcut_list_string_new(
"hoge", NULL),
1075 cut_take_printf(
"++created_at == %d && created_at == %d",
1076 time_at_2009_12_2_15_16_0 + 5,
1077 time_at_2009_12_2_15_16_0 + 5));
1081 data_arithmetic_operator_decr(
void)
1083 int time_at_2009_12_2_15_16_0 = 1259734560;
1086 gcut_list_string_new(
"hoge", NULL),
1087 "--size <= 3 && size == 3");
1089 gcut_list_string_new(
"hoge", NULL),
1090 "--size_in_float <= 3 && size_in_float == 3");
1092 gcut_list_string_new(
"hoge", NULL),
1093 cut_take_printf(
"--created_at == %d && created_at == %d",
1094 time_at_2009_12_2_15_16_0 + 3,
1095 time_at_2009_12_2_15_16_0 + 3));
1099 data_arithmetic_operator_incr_post(
void)
1101 int time_at_2009_12_2_15_16_0 = 1259734560;
1104 gcut_list_string_new(
"hoge", NULL),
1105 "size++ <= 4 && size == 5");
1107 gcut_list_string_new(
"hoge", NULL),
1108 "size_in_float++ <= 4 && size_in_float == 5");
1110 gcut_list_string_new(
"hoge", NULL),
1111 cut_take_printf(
"created_at++ == %d && created_at == %d",
1112 time_at_2009_12_2_15_16_0 + 4,
1113 time_at_2009_12_2_15_16_0 + 5));
1117 data_arithmetic_operator_decr_post(
void)
1119 int time_at_2009_12_2_15_16_0 = 1259734560;
1122 gcut_list_string_new(
"hoge", NULL),
1123 "size-- == 4 && size == 3");
1125 gcut_list_string_new(
"hoge", NULL),
1126 "size_in_float-- == 4 && size_in_float == 3");
1128 gcut_list_string_new(
"hoge", NULL),
1129 cut_take_printf(
"created_at-- == %d && created_at == %d",
1130 time_at_2009_12_2_15_16_0 + 4,
1131 time_at_2009_12_2_15_16_0 + 3));
1137 data_arithmetic_operator_assign();
1138 data_arithmetic_operator_star_assign();
1139 data_arithmetic_operator_slash_assign();
1140 data_arithmetic_operator_mod_assign();
1141 data_arithmetic_operator_plus_assign();
1142 data_arithmetic_operator_minus_assign();
1143 data_arithmetic_operator_shift_l_assign();
1144 data_arithmetic_operator_shift_r_assign();
1145 data_arithmetic_operator_shift_rr_assign();
1146 data_arithmetic_operator_and_assign();
1147 data_arithmetic_operator_xor_assign();
1148 data_arithmetic_operator_or_assign();
1149 data_arithmetic_operator_bitwise_or();
1150 data_arithmetic_operator_bitwise_xor();
1151 data_arithmetic_operator_bitwise_and();
1152 data_arithmetic_operator_bitwise_not();
1153 data_arithmetic_operator_shift_l();
1154 data_arithmetic_operator_shift_r();
1155 data_arithmetic_operator_shift_rr();
1156 data_arithmetic_operator_plus();
1157 data_arithmetic_operator_minus();
1158 data_arithmetic_operator_star();
1159 data_arithmetic_operator_slash();
1160 data_arithmetic_operator_mod();
1161 data_arithmetic_operator_incr();
1162 data_arithmetic_operator_decr();
1163 data_arithmetic_operator_incr_post();
1164 data_arithmetic_operator_decr_post();
1177 cut_assert_not_null(expr);
1179 cut_assert_not_null(v);
1182 gcut_data_get_string(data,
"query"),
1186 cut_assert_not_null(res);
1189 gcut_data_get_pointer(data,
"expected_keys"),
1194 #define ADD_DATUM(label, rc, message, query) \
1195 gcut_add_datum(label, \
1196 "rc", G_TYPE_UINT, rc, \
1197 "message", G_TYPE_STRING, message, \
1198 "query", G_TYPE_STRING, query, \
1202 data_arithmetic_operator_error_plus(
void)
1206 "not a numerical format: <hoge>",
1207 "size == 100 + \"hoge\"");
1211 data_arithmetic_operator_error_minus(
void)
1215 "\"string\" - \"string\" isn't supported",
1216 "body == \"fuga\" - \"hoge\"");
1220 data_arithmetic_operator_error_star(
void)
1224 "\"string\" * \"string\" isn't supported",
1225 "body == \"fuga\" * \"hoge\"");
1229 data_arithmetic_operator_error_slash(
void)
1233 "\"string\" / \"string\" isn't supported",
1234 "body == \"fuga\" / \"hoge\"");
1237 "dividend should not be 0",
1242 data_arithmetic_operator_error_mod(
void)
1246 "\"string\" % \"string\" isn't supported",
1247 "body == \"fuga\" % \"hoge\"");
1250 "dividend should not be 0",
1255 data_arithmetic_operator_error_incr(
void)
1259 cut_take_printf(
"invalid increment target type: %d "
1260 "(FIXME: type name is needed)",
1262 "++size_in_string <= 9");
1266 data_arithmetic_operator_error_decr(
void)
1270 cut_take_printf(
"invalid increment target type: %d "
1271 "(FIXME: type name is needed)",
1273 "--size_in_string <= 7");
1278 data_arithmetic_operator_error_incr_post(
void)
1282 cut_take_printf(
"invalid increment target type: %d "
1283 "(FIXME: type name is needed)",
1285 "size_in_string++ <= 8");
1289 data_arithmetic_operator_error_decr_post(
void)
1293 cut_take_printf(
"invalid increment target type: %d "
1294 "(FIXME: type name is needed)",
1296 "size_in_string-- <= 8");
1302 data_arithmetic_operator_error_plus();
1303 data_arithmetic_operator_error_minus();
1304 data_arithmetic_operator_error_star();
1305 data_arithmetic_operator_error_slash();
1306 data_arithmetic_operator_error_mod();
1307 data_arithmetic_operator_error_incr();
1308 data_arithmetic_operator_error_decr();
1309 data_arithmetic_operator_error_incr_post();
1310 data_arithmetic_operator_error_decr_post();
1323 gcut_data_get_string(data,
"query"),
1327 cut_assert_not_null(res);
1329 gcut_data_get_string(data,
"message"),
1336 #define ADD_DATUM(label, message, query) \
1337 gcut_add_datum(label, \
1338 "message", G_TYPE_STRING, message, \
1339 "query", G_TYPE_STRING, query, \
1343 cut_take_printf(
"constant can't be incremented (++8 <= 9)"),
1346 cut_take_printf(
"constant can't be decremented (--10 <= 9)"),
1349 cut_take_printf(
"constant can't be incremented (8++ <= 9)"),
1352 cut_take_printf(
"constant can't be decremented (10-- <= 9)"),
1367 query = gcut_data_get_string(data,
"query");
1374 gcut_data_get_string(data,
"message"),
1381 #define ADD_DATUM(label, message, query) \
1382 gcut_add_datum(label, \
1383 "message", G_TYPE_STRING, message, \
1384 "query", G_TYPE_STRING, query, \
1388 cut_take_printf(
"'=' is not allowed (size = 100)"),
1391 cut_take_printf(
"'*=' is not allowed (size *= 10)"),
1394 cut_take_printf(
"'/=' is not allowed (size /= 10)"),
1397 cut_take_printf(
"'%%=' is not allowed (size %%= 10)"),
1400 cut_take_printf(
"'+=' is not allowed (size += 10)"),
1403 cut_take_printf(
"'-=' is not allowed (size -= 10)"),
1406 cut_take_printf(
"'<<=' is not allowed (size <<= 10)"),
1409 cut_take_printf(
"'>>=' is not allowed (size >>= 10)"),
1412 cut_take_printf(
"'>>>=' is not allowed (size >>>= 10)"),
1415 cut_take_printf(
"'&=' is not allowed (size &= 10)"),
1418 cut_take_printf(
"'|=' is not allowed (size |= 10)"),
1421 cut_take_printf(
"'^=' is not allowed (size ^= 10)"),
1424 cut_take_printf(
"'++' is not allowed (size++)"),
1427 cut_take_printf(
"'++' is not allowed (++size)"),
1430 cut_take_printf(
"'--' is not allowed (size--)"),
1433 cut_take_printf(
"'--' is not allowed (--size)"),
1448 query = gcut_data_get_string(data,
"query");
1454 gcut_data_get_string(data,
"message"),
1461 #define ADD_DATUM(label, query) \
1462 gcut_add_datum(label, \
1463 "query", G_TYPE_STRING, query, \
1467 "body == \"hoge\" && size == 4");
1481 query = gcut_data_get_string(data,
"query");
1485 cut_message(
"%s", query));