@@ -52,7 +52,8 @@ start() ->
52
52
test_cmp () +
53
53
conv_to_from_float () +
54
54
external_term_decode () +
55
- big_literals ().
55
+ big_literals () +
56
+ to_external_term ().
56
57
57
58
test_mul () ->
58
59
Expected_INT64_MIN = ? MODULE :pow (- 2 , 63 ),
@@ -660,6 +661,135 @@ lit_ovf1() ->
660
661
lit_ovf2 () ->
661
662
? MODULE :id (- 16#10000000000000000000000000000000000000000000000000000000000000000 ).
662
663
664
+ to_external_term () ->
665
+ % maximum
666
+ <<131 , 110 , 32 , 0 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 ,
667
+ 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 ,
668
+ 255 >> = ? MODULE :id (
669
+ erlang :term_to_binary (
670
+ ? MODULE :id (
671
+ erlang :binary_to_integer (
672
+ ? MODULE :id (
673
+ <<" FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" >>
674
+ ),
675
+ 16
676
+ )
677
+ )
678
+ )
679
+ ),
680
+
681
+ % minimum
682
+ <<131 , 110 , 32 , 1 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 ,
683
+ 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 ,
684
+ 255 >> = ? MODULE :id (
685
+ erlang :term_to_binary (
686
+ ? MODULE :id (
687
+ erlang :binary_to_integer (
688
+ ? MODULE :id (
689
+ <<" -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" >>
690
+ ),
691
+ 16
692
+ )
693
+ )
694
+ )
695
+ ),
696
+
697
+ % positive test pattern
698
+ <<131 , 110 , 32 , 0 , 189 , 121 , 53 , 209 , 236 , 251 , 234 , 208 , 201 , 184 , 167 , 86 , 79 , 62 , 45 , 28 , 11 ,
699
+ 42 , 49 , 82 , 116 , 150 , 248 , 222 , 188 , 154 , 120 , 86 , 52 , 18 , 254 , 202 >> = ? MODULE :id (
700
+ erlang :term_to_binary (
701
+ ? MODULE :id (
702
+ erlang :binary_to_integer (
703
+ ? MODULE :id (
704
+ <<" CAFE123456789ABCDEF8967452312A0B1C2D3E4F56A7B8C9D0EAFBECD13579BD" >>
705
+ ),
706
+ 16
707
+ )
708
+ )
709
+ )
710
+ ),
711
+
712
+ % negative test pattern
713
+ <<131 , 110 , 32 , 1 , 189 , 121 , 53 , 209 , 236 , 251 , 234 , 208 , 201 , 184 , 167 , 86 , 79 , 62 , 45 , 28 , 11 ,
714
+ 42 , 49 , 82 , 116 , 150 , 248 , 222 , 188 , 154 , 120 , 86 , 52 , 18 , 254 , 202 >> = ? MODULE :id (
715
+ erlang :term_to_binary (
716
+ ? MODULE :id (
717
+ erlang :binary_to_integer (
718
+ ? MODULE :id (
719
+ <<" -CAFE123456789ABCDEF8967452312A0B1C2D3E4F56A7B8C9D0EAFBECD13579BD" >>
720
+ ),
721
+ 16
722
+ )
723
+ )
724
+ )
725
+ ),
726
+
727
+ % test encoding multiple elements
728
+ <<131 , 108 , 0 , 0 , 0 , 2 , 110 , 32 , 0 , 189 , 121 , 53 , 209 , 236 , 251 , 234 , 208 , 201 , 184 , 167 , 86 ,
729
+ 79 , 62 , 45 , 28 , 11 , 42 , 49 , 82 , 116 , 150 , 248 , 222 , 188 , 154 , 120 , 86 , 52 , 18 , 254 , 202 ,
730
+ 109 , 0 , 0 , 0 , 3 , 116 , 115 , 116 , 106 >> = ? MODULE :id (
731
+ erlang :term_to_binary ([
732
+ ? MODULE :id (
733
+ erlang :binary_to_integer (
734
+ ? MODULE :id (
735
+ <<" CAFE123456789ABCDEF8967452312A0B1C2D3E4F56A7B8C9D0EAFBECD13579BD" >>
736
+ ),
737
+ 16
738
+ )
739
+ ),
740
+ ? MODULE :id (<<" tst" >>)
741
+ ])
742
+ ),
743
+
744
+ % length is 31 bytes long, not divisible by 4, this might cause buffer overflows
745
+ % if not handled correctly
746
+ <<131 , 110 , 31 , 0 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 ,
747
+ 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 ,
748
+ 255 >> = ? MODULE :id (
749
+ erlang :term_to_binary (
750
+ ? MODULE :id (
751
+ erlang :binary_to_integer (
752
+ ? MODULE :id (
753
+ <<" FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" >>
754
+ ),
755
+ 16
756
+ )
757
+ )
758
+ )
759
+ ),
760
+
761
+ % length is 27 bytes long, not disible by 4, also on 64 bits system there is a 0 digit once encoded as term
762
+ % this might cause issues if not handled correctly
763
+ <<131 , 110 , 27 , 0 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 ,
764
+ 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 >> = ? MODULE :id (
765
+ erlang :term_to_binary (
766
+ ? MODULE :id (
767
+ erlang :binary_to_integer (
768
+ ? MODULE :id (<<" FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" >>), 16
769
+ )
770
+ )
771
+ )
772
+ ),
773
+
774
+ % test if encoding multiple elements works
775
+ <<131 , 108 , 0 , 0 , 0 , 3 , 97 , 1 , 110 , 27 , 0 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 ,
776
+ 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 255 , 109 , 0 ,
777
+ 0 , 0 , 6 , 116 , 115 , 116 , 98 , 105 , 110 , 106 >> = ? MODULE :id (
778
+ erlang :term_to_binary (
779
+ ? MODULE :id ([
780
+ 1 ,
781
+ ? MODULE :id (
782
+ erlang :binary_to_integer (
783
+ ? MODULE :id (<<" FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" >>), 16
784
+ )
785
+ ),
786
+ <<" tstbin" >>
787
+ ])
788
+ )
789
+ ),
790
+
791
+ 0 .
792
+
663
793
id (X ) ->
664
794
X .
665
795
0 commit comments