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