@@ -623,4 +623,147 @@ TEST(TestGdvFnStubs, TestInitCap) {
623623 " unexpected byte \\ e0 encountered while decoding utf8 string" ));
624624 ctx.Reset ();
625625}
626+
627+ TEST (TestGdvFnStubs, TestCastVarbinaryINT) {
628+ gandiva::ExecutionContext ctx;
629+
630+ int64_t ctx_ptr = reinterpret_cast <int64_t >(&ctx);
631+
632+ EXPECT_EQ (gdv_fn_castINT_varbinary (ctx_ptr, " -45" , 3 ), -45 );
633+ EXPECT_EQ (gdv_fn_castINT_varbinary (ctx_ptr, " 0" , 1 ), 0 );
634+ EXPECT_EQ (gdv_fn_castINT_varbinary (ctx_ptr, " 2147483647" , 10 ), 2147483647 );
635+ EXPECT_EQ (gdv_fn_castINT_varbinary (ctx_ptr, " \x32\x33 " , 2 ), 23 );
636+ EXPECT_EQ (gdv_fn_castINT_varbinary (ctx_ptr, " 02147483647" , 11 ), 2147483647 );
637+ EXPECT_EQ (gdv_fn_castINT_varbinary (ctx_ptr, " -2147483648" , 11 ), -2147483648LL );
638+ EXPECT_EQ (gdv_fn_castINT_varbinary (ctx_ptr, " -02147483648" , 12 ), -2147483648LL );
639+ EXPECT_EQ (gdv_fn_castINT_varbinary (ctx_ptr, " 12 " , 4 ), 12 );
640+
641+ gdv_fn_castINT_varbinary (ctx_ptr, " 2147483648" , 10 );
642+ EXPECT_THAT (ctx.get_error (),
643+ ::testing::HasSubstr (" Failed to cast the string 2147483648 to int32" ));
644+ ctx.Reset ();
645+
646+ gdv_fn_castINT_varbinary (ctx_ptr, " -2147483649" , 11 );
647+ EXPECT_THAT (ctx.get_error (),
648+ ::testing::HasSubstr (" Failed to cast the string -2147483649 to int32" ));
649+ ctx.Reset ();
650+
651+ gdv_fn_castINT_varbinary (ctx_ptr, " 12.34" , 5 );
652+ EXPECT_THAT (ctx.get_error (),
653+ ::testing::HasSubstr (" Failed to cast the string 12.34 to int32" ));
654+ ctx.Reset ();
655+
656+ gdv_fn_castINT_varbinary (ctx_ptr, " abc" , 3 );
657+ EXPECT_THAT (ctx.get_error (),
658+ ::testing::HasSubstr (" Failed to cast the string abc to int32" ));
659+ ctx.Reset ();
660+
661+ gdv_fn_castINT_varbinary (ctx_ptr, " " , 0 );
662+ EXPECT_THAT (ctx.get_error (),
663+ ::testing::HasSubstr (" Failed to cast the string to int32" ));
664+ ctx.Reset ();
665+
666+ gdv_fn_castINT_varbinary (ctx_ptr, " -" , 1 );
667+ EXPECT_THAT (ctx.get_error (),
668+ ::testing::HasSubstr (" Failed to cast the string - to int32" ));
669+ ctx.Reset ();
670+ }
671+
672+ TEST (TestGdvFnStubs, TestCastVarbinaryBIGINT) {
673+ gandiva::ExecutionContext ctx;
674+
675+ int64_t ctx_ptr = reinterpret_cast <int64_t >(&ctx);
676+
677+ EXPECT_EQ (gdv_fn_castBIGINT_varbinary (ctx_ptr, " -45" , 3 ), -45 );
678+ EXPECT_EQ (gdv_fn_castBIGINT_varbinary (ctx_ptr, " 0" , 1 ), 0 );
679+ EXPECT_EQ (gdv_fn_castBIGINT_varbinary (ctx_ptr, " 9223372036854775807" , 19 ),
680+ 9223372036854775807LL );
681+ EXPECT_EQ (gdv_fn_castBIGINT_varbinary (ctx_ptr, " 09223372036854775807" , 20 ),
682+ 9223372036854775807LL );
683+ EXPECT_EQ (gdv_fn_castBIGINT_varbinary (ctx_ptr, " -9223372036854775808" , 20 ),
684+ -9223372036854775807LL - 1 );
685+ EXPECT_EQ (gdv_fn_castBIGINT_varbinary (ctx_ptr, " -009223372036854775808" , 22 ),
686+ -9223372036854775807LL - 1 );
687+ EXPECT_EQ (gdv_fn_castBIGINT_varbinary (ctx_ptr, " 12 " , 4 ), 12 );
688+
689+ EXPECT_EQ (gdv_fn_castBIGINT_varbinary (ctx_ptr,
690+ " \x39\x39\x39\x39\x39\x39\x39\x39\x39\x39 " , 10 ),
691+ 9999999999LL );
692+
693+ gdv_fn_castBIGINT_varbinary (ctx_ptr, " 9223372036854775808" , 19 );
694+ EXPECT_THAT (
695+ ctx.get_error (),
696+ ::testing::HasSubstr (" Failed to cast the string 9223372036854775808 to int64" ));
697+ ctx.Reset ();
698+
699+ gdv_fn_castBIGINT_varbinary (ctx_ptr, " -9223372036854775809" , 20 );
700+ EXPECT_THAT (
701+ ctx.get_error (),
702+ ::testing::HasSubstr (" Failed to cast the string -9223372036854775809 to int64" ));
703+ ctx.Reset ();
704+
705+ gdv_fn_castBIGINT_varbinary (ctx_ptr, " 12.34" , 5 );
706+ EXPECT_THAT (ctx.get_error (),
707+ ::testing::HasSubstr (" Failed to cast the string 12.34 to int64" ));
708+ ctx.Reset ();
709+
710+ gdv_fn_castBIGINT_varbinary (ctx_ptr, " abc" , 3 );
711+ EXPECT_THAT (ctx.get_error (),
712+ ::testing::HasSubstr (" Failed to cast the string abc to int64" ));
713+ ctx.Reset ();
714+
715+ gdv_fn_castBIGINT_varbinary (ctx_ptr, " " , 0 );
716+ EXPECT_THAT (ctx.get_error (),
717+ ::testing::HasSubstr (" Failed to cast the string to int64" ));
718+ ctx.Reset ();
719+
720+ gdv_fn_castBIGINT_varbinary (ctx_ptr, " -" , 1 );
721+ EXPECT_THAT (ctx.get_error (),
722+ ::testing::HasSubstr (" Failed to cast the string - to int64" ));
723+ ctx.Reset ();
724+ }
725+
726+ TEST (TestGdvFnStubs, TestCastVarbinaryFloat4) {
727+ gandiva::ExecutionContext ctx;
728+
729+ int64_t ctx_ptr = reinterpret_cast <int64_t >(&ctx);
730+
731+ EXPECT_EQ (gdv_fn_castFLOAT4_varbinary (ctx_ptr, " -45.34" , 6 ), -45 .34f );
732+ EXPECT_EQ (gdv_fn_castFLOAT4_varbinary (ctx_ptr, " 0" , 1 ), 0 .0f );
733+ EXPECT_EQ (gdv_fn_castFLOAT4_varbinary (ctx_ptr, " 5" , 1 ), 5 .0f );
734+ EXPECT_EQ (gdv_fn_castFLOAT4_varbinary (ctx_ptr, " 3.4 " , 5 ), 3 .4f );
735+ EXPECT_EQ (gdv_fn_castFLOAT4_varbinary (ctx_ptr, " \x33\x2E\x34 " , 5 ), 3 .4f );
736+
737+ gdv_fn_castFLOAT4_varbinary (ctx_ptr, " " , 0 );
738+ EXPECT_THAT (ctx.get_error (),
739+ ::testing::HasSubstr (" Failed to cast the string to float" ));
740+ ctx.Reset ();
741+
742+ gdv_fn_castFLOAT4_varbinary (ctx_ptr, " e" , 1 );
743+ EXPECT_THAT (ctx.get_error (),
744+ ::testing::HasSubstr (" Failed to cast the string e to float" ));
745+ ctx.Reset ();
746+ }
747+
748+ TEST (TestGdvFnStubs, TestCastVarbinaryFloat8) {
749+ gandiva::ExecutionContext ctx;
750+
751+ int64_t ctx_ptr = reinterpret_cast <int64_t >(&ctx);
752+
753+ EXPECT_EQ (gdv_fn_castFLOAT8_varbinary (ctx_ptr, " -45.34" , 6 ), -45.34 );
754+ EXPECT_EQ (gdv_fn_castFLOAT8_varbinary (ctx_ptr, " 0" , 1 ), 0.0 );
755+ EXPECT_EQ (gdv_fn_castFLOAT8_varbinary (ctx_ptr, " 5" , 1 ), 5.0 );
756+ EXPECT_EQ (gdv_fn_castFLOAT8_varbinary (ctx_ptr, " \x33\x2E\x34 " , 5 ), 3.4 );
757+
758+ gdv_fn_castFLOAT8_varbinary (ctx_ptr, " " , 0 );
759+ EXPECT_THAT (ctx.get_error (),
760+ ::testing::HasSubstr (" Failed to cast the string to double" ));
761+ ctx.Reset ();
762+
763+ gdv_fn_castFLOAT8_varbinary (ctx_ptr, " e" , 1 );
764+ EXPECT_THAT (ctx.get_error (),
765+ ::testing::HasSubstr (" Failed to cast the string e to double" ));
766+ ctx.Reset ();
767+ }
768+
626769} // namespace gandiva
0 commit comments