@@ -667,20 +667,152 @@ test "small int addition" {
667
667
test "@mulWithOverflow" {
668
668
if (builtin .zig_backend == .stage2_c ) return error .SkipZigTest ; // TODO
669
669
670
- var result : u8 = undefined ;
671
- try expect (@mulWithOverflow (u8 , 86 , 3 , & result ));
672
- try expect (result == 2 );
673
- try expect (! @mulWithOverflow (u8 , 85 , 3 , & result ));
674
- try expect (result == 255 );
670
+ {
671
+ var a : u8 = 3 ;
672
+ var b : u8 = 85 ;
673
+ var res : u8 = undefined ;
675
674
676
- var a : u8 = 123 ;
677
- var b : u8 = 2 ;
678
- try expect (! @mulWithOverflow (u8 , a , b , & result ));
679
- try expect (result == 246 );
675
+ try expect (! @mulWithOverflow (u8 , a , b , & res ));
676
+ try expect (res == 255 );
677
+
678
+ b = 86 ;
679
+ try expect (@mulWithOverflow (u8 , a , b , & res ));
680
+ try expect (res == 2 );
681
+ }
682
+
683
+ {
684
+ var a : i8 = 3 ;
685
+ var b : i8 = -42 ;
686
+ var res : i8 = undefined ;
687
+ try expect (! @mulWithOverflow (i8 , a , b , & res ));
688
+ try expect (res == -126 );
689
+
690
+ b = -43 ;
691
+ try expect (@mulWithOverflow (i8 , a , b , & res ));
692
+ try expect (res == 127 );
693
+ }
694
+
695
+ {
696
+ var a : u16 = 3 ;
697
+ var b : u16 = 0x5555 ;
698
+ var res : u16 = undefined ;
699
+ try expect (! @mulWithOverflow (u16 , a , b , & res ));
700
+ try expect (res == 0xffff );
701
+
702
+ b = 0x5556 ;
703
+ try expect (@mulWithOverflow (u16 , a , b , & res ));
704
+ try expect (res == 2 );
705
+ }
706
+
707
+ {
708
+ var a : i16 = 3 ;
709
+ var b : i16 = -0x2aaa ;
710
+ var res : i16 = undefined ;
711
+ try expect (! @mulWithOverflow (i16 , a , b , & res ));
712
+ try expect (res == -0x7ffe );
713
+
714
+ b = -0x2aab ;
715
+ try expect (@mulWithOverflow (i16 , a , b , & res ));
716
+ try expect (res == 0x7fff );
717
+ }
680
718
681
- b = 4 ;
682
- try expect (@mulWithOverflow (u8 , a , b , & result ));
683
- try expect (result == 236 );
719
+ {
720
+ var a : u32 = 3 ;
721
+ var b : u32 = 0x55555555 ;
722
+ var res : u32 = undefined ;
723
+ try expect (! @mulWithOverflow (u32 , a , b , & res ));
724
+ try expect (res == 0xffffffff );
725
+
726
+ b = 0x55555556 ;
727
+ try expect (@mulWithOverflow (u32 , a , b , & res ));
728
+ try expect (res == 2 );
729
+ }
730
+
731
+ {
732
+ var a : i32 = 3 ;
733
+ var b : i32 = -0x2aaaaaaa ;
734
+ var res : i32 = undefined ;
735
+ try expect (! @mulWithOverflow (i32 , a , b , & res ));
736
+ try expect (res == -0x7ffffffe );
737
+
738
+ b = -0x2aaaaaab ;
739
+ try expect (@mulWithOverflow (i32 , a , b , & res ));
740
+ try expect (res == 0x7fffffff );
741
+ }
742
+
743
+ {
744
+ var a : u64 = 3 ;
745
+ var b : u64 = 0x5555555555555555 ;
746
+ var res : u64 = undefined ;
747
+ try expect (! @mulWithOverflow (u64 , a , b , & res ));
748
+ try expect (res == 0xffffffffffffffff );
749
+
750
+ b = 0x5555555555555556 ;
751
+ try expect (@mulWithOverflow (u64 , a , b , & res ));
752
+ try expect (res == 2 );
753
+ }
754
+
755
+ {
756
+ var a : i64 = 3 ;
757
+ var b : i64 = -0x2aaaaaaaaaaaaaaa ;
758
+ var res : i64 = undefined ;
759
+ try expect (! @mulWithOverflow (i64 , a , b , & res ));
760
+ try expect (res == -0x7ffffffffffffffe );
761
+
762
+ b = -0x2aaaaaaaaaaaaaab ;
763
+ try expect (@mulWithOverflow (i64 , a , b , & res ));
764
+ try expect (res == 0x7fffffffffffffff );
765
+ }
766
+ }
767
+
768
+ test "@mulWithOverflow - non-power-of-two integers" {
769
+ {
770
+ var a : u30 = 3 ;
771
+ var b : u30 = 0x15555555 ;
772
+ var res : u30 = undefined ;
773
+ try expect (! @mulWithOverflow (u30 , a , b , & res ));
774
+ try expect (res == 0x3fffffff );
775
+
776
+ b = 0x15555556 ;
777
+ try expect (@mulWithOverflow (u30 , a , b , & res ));
778
+ try expect (res == 2 );
779
+ }
780
+
781
+ {
782
+ var a : i30 = 3 ;
783
+ var b : i30 = -0xaaaaaaa ;
784
+ var res : i30 = undefined ;
785
+ try expect (! @mulWithOverflow (i30 , a , b , & res ));
786
+ try expect (res == -0x1ffffffe );
787
+
788
+ b = -0xaaaaaab ;
789
+ try expect (@mulWithOverflow (i30 , a , b , & res ));
790
+ try expect (res == 0x1fffffff );
791
+ }
792
+
793
+ {
794
+ var a : u62 = 3 ;
795
+ var b : u62 = 0x1555555555555555 ;
796
+ var res : u62 = undefined ;
797
+ try expect (! @mulWithOverflow (u62 , a , b , & res ));
798
+ try expect (res == 0x3fffffffffffffff );
799
+
800
+ b = 0x1555555555555556 ;
801
+ try expect (@mulWithOverflow (u62 , a , b , & res ));
802
+ try expect (res == 2 );
803
+ }
804
+
805
+ {
806
+ var a : i62 = 3 ;
807
+ var b : i62 = -0xaaaaaaaaaaaaaaa ;
808
+ var res : i62 = undefined ;
809
+ try expect (! @mulWithOverflow (i62 , a , b , & res ));
810
+ try expect (res == -0x1ffffffffffffffe );
811
+
812
+ b = -0xaaaaaaaaaaaaaab ;
813
+ try expect (@mulWithOverflow (i62 , a , b , & res ));
814
+ try expect (res == 0x1fffffffffffffff );
815
+ }
684
816
}
685
817
686
818
test "@subWithOverflow" {
0 commit comments