@@ -879,3 +879,83 @@ test "saturating shift-left" {
879
879
try S .doTheTest ();
880
880
comptime try S .doTheTest ();
881
881
}
882
+
883
+ test "@addWithOverflow" {
884
+ if (builtin .zig_backend == .stage1 ) return error .SkipZigTest ;
885
+ if (builtin .zig_backend == .stage2_wasm ) return error .SkipZigTest ; // TODO
886
+ if (builtin .zig_backend == .stage2_c ) return error .SkipZigTest ; // TODO
887
+ if (builtin .zig_backend == .stage2_x86_64 ) return error .SkipZigTest ; // TODO
888
+ if (builtin .zig_backend == .stage2_aarch64 ) return error .SkipZigTest ; // TODO
889
+ if (builtin .zig_backend == .stage2_arm ) return error .SkipZigTest ; // TODO
890
+
891
+ const S = struct {
892
+ fn doTheTest () ! void {
893
+ var result : @Vector (4 , u8 ) = undefined ;
894
+ var overflow = @addWithOverflow (@Vector (4 , u8 ), @Vector (4 , u8 ){ 250 , 250 , 250 , 250 }, @Vector (4 , u8 ){ 0 , 5 , 6 , 10 }, & result );
895
+ var expected : @Vector (4 , bool ) = .{ false , false , true , true };
896
+ try expect (mem .eql (bool , &@as ([4 ]bool , overflow ), &@as ([4 ]bool , expected )));
897
+ }
898
+ };
899
+ try S .doTheTest ();
900
+ comptime try S .doTheTest ();
901
+ }
902
+
903
+ test "@subWithOverflow" {
904
+ if (builtin .zig_backend == .stage1 ) return error .SkipZigTest ;
905
+ if (builtin .zig_backend == .stage2_wasm ) return error .SkipZigTest ; // TODO
906
+ if (builtin .zig_backend == .stage2_c ) return error .SkipZigTest ; // TODO
907
+ if (builtin .zig_backend == .stage2_x86_64 ) return error .SkipZigTest ; // TODO
908
+ if (builtin .zig_backend == .stage2_aarch64 ) return error .SkipZigTest ; // TODO
909
+ if (builtin .zig_backend == .stage2_arm ) return error .SkipZigTest ; // TODO
910
+
911
+ const S = struct {
912
+ fn doTheTest () ! void {
913
+ var result : @Vector (4 , i8 ) = undefined ;
914
+ var overflow = @subWithOverflow (@Vector (4 , i8 ), @Vector (4 , i8 ){ -120 , -120 , 120 , 120 }, @Vector (4 , i8 ){ 8 , 9 , -7 , -8 }, & result );
915
+ var expected : @Vector (4 , bool ) = .{ false , true , false , true };
916
+ try expect (mem .eql (bool , &@as ([4 ]bool , overflow ), &@as ([4 ]bool , expected )));
917
+ }
918
+ };
919
+ try S .doTheTest ();
920
+ comptime try S .doTheTest ();
921
+ }
922
+
923
+ test "@mulWithOverflow" {
924
+ if (builtin .zig_backend == .stage1 ) return error .SkipZigTest ;
925
+ if (builtin .zig_backend == .stage2_wasm ) return error .SkipZigTest ; // TODO
926
+ if (builtin .zig_backend == .stage2_c ) return error .SkipZigTest ; // TODO
927
+ if (builtin .zig_backend == .stage2_x86_64 ) return error .SkipZigTest ; // TODO
928
+ if (builtin .zig_backend == .stage2_aarch64 ) return error .SkipZigTest ; // TODO
929
+ if (builtin .zig_backend == .stage2_arm ) return error .SkipZigTest ; // TODO
930
+
931
+ const S = struct {
932
+ fn doTheTest () ! void {
933
+ var result : @Vector (4 , u8 ) = undefined ;
934
+ var overflow = @mulWithOverflow (@Vector (4 , u8 ), @Vector (4 , u8 ){ 10 , 10 , 10 , 10 }, @Vector (4 , u8 ){ 25 , 26 , 0 , 30 }, & result );
935
+ var expected : @Vector (4 , bool ) = .{ false , true , false , true };
936
+ try expect (mem .eql (bool , &@as ([4 ]bool , overflow ), &@as ([4 ]bool , expected )));
937
+ }
938
+ };
939
+ try S .doTheTest ();
940
+ comptime try S .doTheTest ();
941
+ }
942
+
943
+ test "@shlWithOverflow" {
944
+ if (builtin .zig_backend == .stage1 ) return error .SkipZigTest ;
945
+ if (builtin .zig_backend == .stage2_wasm ) return error .SkipZigTest ; // TODO
946
+ if (builtin .zig_backend == .stage2_c ) return error .SkipZigTest ; // TODO
947
+ if (builtin .zig_backend == .stage2_x86_64 ) return error .SkipZigTest ; // TODO
948
+ if (builtin .zig_backend == .stage2_aarch64 ) return error .SkipZigTest ; // TODO
949
+ if (builtin .zig_backend == .stage2_arm ) return error .SkipZigTest ; // TODO
950
+
951
+ const S = struct {
952
+ fn doTheTest () ! void {
953
+ var result : @Vector (4 , u8 ) = undefined ;
954
+ var overflow = @shlWithOverflow (@Vector (4 , u8 ), @Vector (4 , u8 ){ 0 , 1 , 8 , 255 }, @Vector (4 , u3 ){ 7 , 7 , 7 , 7 }, & result );
955
+ var expected : @Vector (4 , bool ) = .{ false , false , true , true };
956
+ try expect (mem .eql (bool , &@as ([4 ]bool , overflow ), &@as ([4 ]bool , expected )));
957
+ }
958
+ };
959
+ try S .doTheTest ();
960
+ comptime try S .doTheTest ();
961
+ }
0 commit comments