Skip to content

Commit dec0deb

Browse files
committed
Rust: Add some more test cases for type inference on Vecs.
1 parent 4292b03 commit dec0deb

File tree

2 files changed

+111
-73
lines changed

2 files changed

+111
-73
lines changed

rust/ql/test/library-tests/type-inference/main.rs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1869,11 +1869,21 @@ mod loops {
18691869

18701870
// for loops with containers
18711871

1872-
let vals3 = vec![1, 2, 3]; // MISSING: type=vals:Vec<i32>
1872+
let vals3 = vec![1, 2, 3]; // $ MISSING: type=vals3:Vec<i32>
18731873
for i in vals3 { } // $ MISSING: type=i:i32
18741874

1875-
let vals4 : Vec<&u64> = [1u64, 2, 3].iter().collect();
1876-
for u in vals4 { } // $ MISSING: type=u:&u64
1875+
let vals4 = [1u16, 2, 3].to_vec(); // $ MISSING: type=vals4:Vec<u16>
1876+
for u in vals4 { } // $ MISSING: type=u:u16
1877+
1878+
let vals5 = Vec::from([1u32, 2, 3]); // $ MISSING: type=vals5:Vec<u32>
1879+
for u in vals5 { } // $ MISSING: type=u:u32
1880+
1881+
let vals6 : Vec<&u64> = [1u64, 2, 3].iter().collect(); // $ MISSING: type=vals6:Vec<&u64>
1882+
for u in vals6 { } // $ MISSING: type=u:&u64
1883+
1884+
let mut vals7 = Vec::new(); // $ MISSING: type=vals7:Vec<u8>
1885+
vals7.push(1u8); // $ method=push
1886+
for u in vals7 { } // $ MISSING: type=u:u8
18771887

18781888
let matrix1 = vec![vec![1, 2], vec![3, 4]]; // $ MISSING: type=vals5:Vec<Vec<i32>>
18791889
for row in matrix1 { // $ MISSING: type=row:Vec<i32>

rust/ql/test/library-tests/type-inference/type-inference.expected

Lines changed: 98 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -2778,74 +2778,102 @@ inferType
27782778
| main.rs:1872:26:1872:26 | 1 | | {EXTERNAL LOCATION} | i32 |
27792779
| main.rs:1872:29:1872:29 | 2 | | {EXTERNAL LOCATION} | i32 |
27802780
| main.rs:1872:32:1872:32 | 3 | | {EXTERNAL LOCATION} | i32 |
2781-
| main.rs:1875:13:1875:17 | vals4 | | {EXTERNAL LOCATION} | Vec |
2782-
| main.rs:1875:13:1875:17 | vals4 | T | file://:0:0:0:0 | & |
2783-
| main.rs:1875:13:1875:17 | vals4 | T.&T | {EXTERNAL LOCATION} | u64 |
2784-
| main.rs:1875:33:1875:44 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 |
2785-
| main.rs:1875:33:1875:44 | [...] | [T;...] | {EXTERNAL LOCATION} | u64 |
2786-
| main.rs:1875:33:1875:61 | ... .collect() | | {EXTERNAL LOCATION} | Vec |
2787-
| main.rs:1875:33:1875:61 | ... .collect() | T | file://:0:0:0:0 | & |
2788-
| main.rs:1875:33:1875:61 | ... .collect() | T.&T | {EXTERNAL LOCATION} | u64 |
2789-
| main.rs:1875:34:1875:37 | 1u64 | | {EXTERNAL LOCATION} | i32 |
2790-
| main.rs:1875:34:1875:37 | 1u64 | | {EXTERNAL LOCATION} | u64 |
2791-
| main.rs:1875:40:1875:40 | 2 | | {EXTERNAL LOCATION} | i32 |
2792-
| main.rs:1875:40:1875:40 | 2 | | {EXTERNAL LOCATION} | u64 |
2793-
| main.rs:1875:43:1875:43 | 3 | | {EXTERNAL LOCATION} | i32 |
2794-
| main.rs:1875:43:1875:43 | 3 | | {EXTERNAL LOCATION} | u64 |
2795-
| main.rs:1876:13:1876:13 | u | | file://:0:0:0:0 | & |
2796-
| main.rs:1876:13:1876:13 | u | &T | {EXTERNAL LOCATION} | u64 |
2797-
| main.rs:1876:18:1876:22 | vals4 | | {EXTERNAL LOCATION} | Vec |
2798-
| main.rs:1876:18:1876:22 | vals4 | T | file://:0:0:0:0 | & |
2799-
| main.rs:1876:18:1876:22 | vals4 | T.&T | {EXTERNAL LOCATION} | u64 |
2800-
| main.rs:1878:33:1878:33 | 1 | | {EXTERNAL LOCATION} | i32 |
2801-
| main.rs:1878:36:1878:36 | 2 | | {EXTERNAL LOCATION} | i32 |
2802-
| main.rs:1878:45:1878:45 | 3 | | {EXTERNAL LOCATION} | i32 |
2803-
| main.rs:1878:48:1878:48 | 4 | | {EXTERNAL LOCATION} | i32 |
2804-
| main.rs:1884:13:1884:20 | mut map1 | | {EXTERNAL LOCATION} | HashMap |
2805-
| main.rs:1884:13:1884:20 | mut map1 | S | {EXTERNAL LOCATION} | RandomState |
2806-
| main.rs:1884:24:1884:55 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap |
2807-
| main.rs:1884:24:1884:55 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState |
2808-
| main.rs:1885:9:1885:12 | map1 | | {EXTERNAL LOCATION} | HashMap |
2809-
| main.rs:1885:9:1885:12 | map1 | S | {EXTERNAL LOCATION} | RandomState |
2810-
| main.rs:1885:9:1885:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option |
2811-
| main.rs:1885:21:1885:21 | 1 | | {EXTERNAL LOCATION} | i32 |
2812-
| main.rs:1885:24:1885:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box |
2813-
| main.rs:1885:33:1885:37 | "one" | | {EXTERNAL LOCATION} | str |
2814-
| main.rs:1886:9:1886:12 | map1 | | {EXTERNAL LOCATION} | HashMap |
2815-
| main.rs:1886:9:1886:12 | map1 | S | {EXTERNAL LOCATION} | RandomState |
2816-
| main.rs:1886:9:1886:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option |
2817-
| main.rs:1886:21:1886:21 | 2 | | {EXTERNAL LOCATION} | i32 |
2818-
| main.rs:1886:24:1886:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box |
2819-
| main.rs:1886:33:1886:37 | "two" | | {EXTERNAL LOCATION} | str |
2820-
| main.rs:1887:20:1887:23 | map1 | | {EXTERNAL LOCATION} | HashMap |
2821-
| main.rs:1887:20:1887:23 | map1 | S | {EXTERNAL LOCATION} | RandomState |
2822-
| main.rs:1887:20:1887:30 | map1.keys() | | {EXTERNAL LOCATION} | Keys |
2823-
| main.rs:1888:22:1888:25 | map1 | | {EXTERNAL LOCATION} | HashMap |
2824-
| main.rs:1888:22:1888:25 | map1 | S | {EXTERNAL LOCATION} | RandomState |
2825-
| main.rs:1888:22:1888:34 | map1.values() | | {EXTERNAL LOCATION} | Values |
2826-
| main.rs:1889:29:1889:32 | map1 | | {EXTERNAL LOCATION} | HashMap |
2827-
| main.rs:1889:29:1889:32 | map1 | S | {EXTERNAL LOCATION} | RandomState |
2828-
| main.rs:1889:29:1889:39 | map1.iter() | | {EXTERNAL LOCATION} | Iter |
2829-
| main.rs:1890:29:1890:33 | &map1 | | file://:0:0:0:0 | & |
2830-
| main.rs:1890:29:1890:33 | &map1 | &T | {EXTERNAL LOCATION} | HashMap |
2831-
| main.rs:1890:29:1890:33 | &map1 | &T.S | {EXTERNAL LOCATION} | RandomState |
2832-
| main.rs:1890:30:1890:33 | map1 | | {EXTERNAL LOCATION} | HashMap |
2833-
| main.rs:1890:30:1890:33 | map1 | S | {EXTERNAL LOCATION} | RandomState |
2834-
| main.rs:1894:13:1894:17 | mut a | | {EXTERNAL LOCATION} | i32 |
2835-
| main.rs:1894:13:1894:17 | mut a | | {EXTERNAL LOCATION} | i64 |
2836-
| main.rs:1894:26:1894:26 | 0 | | {EXTERNAL LOCATION} | i32 |
2837-
| main.rs:1894:26:1894:26 | 0 | | {EXTERNAL LOCATION} | i64 |
2838-
| main.rs:1895:15:1895:15 | a | | {EXTERNAL LOCATION} | i32 |
2839-
| main.rs:1895:15:1895:15 | a | | {EXTERNAL LOCATION} | i64 |
2840-
| main.rs:1895:15:1895:20 | ... < ... | | {EXTERNAL LOCATION} | bool |
2841-
| main.rs:1895:19:1895:20 | 10 | | {EXTERNAL LOCATION} | i32 |
2842-
| main.rs:1896:13:1896:13 | a | | {EXTERNAL LOCATION} | i32 |
2843-
| main.rs:1896:13:1896:13 | a | | {EXTERNAL LOCATION} | i64 |
2844-
| main.rs:1896:13:1896:18 | ... += ... | | file://:0:0:0:0 | () |
2845-
| main.rs:1896:18:1896:18 | 1 | | {EXTERNAL LOCATION} | i32 |
2846-
| main.rs:1903:5:1903:20 | ...::f(...) | | main.rs:67:5:67:21 | Foo |
2847-
| main.rs:1904:5:1904:60 | ...::g(...) | | main.rs:67:5:67:21 | Foo |
2848-
| main.rs:1904:20:1904:38 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo |
2849-
| main.rs:1904:41:1904:59 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo |
2850-
| main.rs:1920:5:1920:15 | ...::f(...) | | {EXTERNAL LOCATION} | trait Future |
2781+
| main.rs:1875:21:1875:32 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 |
2782+
| main.rs:1875:21:1875:32 | [...] | [T;...] | {EXTERNAL LOCATION} | u16 |
2783+
| main.rs:1875:22:1875:25 | 1u16 | | {EXTERNAL LOCATION} | i32 |
2784+
| main.rs:1875:22:1875:25 | 1u16 | | {EXTERNAL LOCATION} | u16 |
2785+
| main.rs:1875:28:1875:28 | 2 | | {EXTERNAL LOCATION} | i32 |
2786+
| main.rs:1875:28:1875:28 | 2 | | {EXTERNAL LOCATION} | u16 |
2787+
| main.rs:1875:31:1875:31 | 3 | | {EXTERNAL LOCATION} | i32 |
2788+
| main.rs:1875:31:1875:31 | 3 | | {EXTERNAL LOCATION} | u16 |
2789+
| main.rs:1878:13:1878:17 | vals5 | | {EXTERNAL LOCATION} | Vec |
2790+
| main.rs:1878:13:1878:17 | vals5 | T | {EXTERNAL LOCATION} | u8 |
2791+
| main.rs:1878:21:1878:43 | ...::from(...) | | {EXTERNAL LOCATION} | Vec |
2792+
| main.rs:1878:21:1878:43 | ...::from(...) | T | {EXTERNAL LOCATION} | u8 |
2793+
| main.rs:1878:31:1878:42 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 |
2794+
| main.rs:1878:31:1878:42 | [...] | [T;...] | {EXTERNAL LOCATION} | u32 |
2795+
| main.rs:1878:32:1878:35 | 1u32 | | {EXTERNAL LOCATION} | i32 |
2796+
| main.rs:1878:32:1878:35 | 1u32 | | {EXTERNAL LOCATION} | u32 |
2797+
| main.rs:1878:38:1878:38 | 2 | | {EXTERNAL LOCATION} | i32 |
2798+
| main.rs:1878:38:1878:38 | 2 | | {EXTERNAL LOCATION} | u32 |
2799+
| main.rs:1878:41:1878:41 | 3 | | {EXTERNAL LOCATION} | i32 |
2800+
| main.rs:1878:41:1878:41 | 3 | | {EXTERNAL LOCATION} | u32 |
2801+
| main.rs:1879:13:1879:13 | u | | {EXTERNAL LOCATION} | u8 |
2802+
| main.rs:1879:18:1879:22 | vals5 | | {EXTERNAL LOCATION} | Vec |
2803+
| main.rs:1879:18:1879:22 | vals5 | T | {EXTERNAL LOCATION} | u8 |
2804+
| main.rs:1881:13:1881:17 | vals6 | | {EXTERNAL LOCATION} | Vec |
2805+
| main.rs:1881:13:1881:17 | vals6 | T | file://:0:0:0:0 | & |
2806+
| main.rs:1881:13:1881:17 | vals6 | T.&T | {EXTERNAL LOCATION} | u64 |
2807+
| main.rs:1881:33:1881:44 | [...] | [T;...] | {EXTERNAL LOCATION} | i32 |
2808+
| main.rs:1881:33:1881:44 | [...] | [T;...] | {EXTERNAL LOCATION} | u64 |
2809+
| main.rs:1881:33:1881:61 | ... .collect() | | {EXTERNAL LOCATION} | Vec |
2810+
| main.rs:1881:33:1881:61 | ... .collect() | T | file://:0:0:0:0 | & |
2811+
| main.rs:1881:33:1881:61 | ... .collect() | T.&T | {EXTERNAL LOCATION} | u64 |
2812+
| main.rs:1881:34:1881:37 | 1u64 | | {EXTERNAL LOCATION} | i32 |
2813+
| main.rs:1881:34:1881:37 | 1u64 | | {EXTERNAL LOCATION} | u64 |
2814+
| main.rs:1881:40:1881:40 | 2 | | {EXTERNAL LOCATION} | i32 |
2815+
| main.rs:1881:40:1881:40 | 2 | | {EXTERNAL LOCATION} | u64 |
2816+
| main.rs:1881:43:1881:43 | 3 | | {EXTERNAL LOCATION} | i32 |
2817+
| main.rs:1881:43:1881:43 | 3 | | {EXTERNAL LOCATION} | u64 |
2818+
| main.rs:1882:13:1882:13 | u | | file://:0:0:0:0 | & |
2819+
| main.rs:1882:13:1882:13 | u | &T | {EXTERNAL LOCATION} | u64 |
2820+
| main.rs:1882:18:1882:22 | vals6 | | {EXTERNAL LOCATION} | Vec |
2821+
| main.rs:1882:18:1882:22 | vals6 | T | file://:0:0:0:0 | & |
2822+
| main.rs:1882:18:1882:22 | vals6 | T.&T | {EXTERNAL LOCATION} | u64 |
2823+
| main.rs:1884:13:1884:21 | mut vals7 | | {EXTERNAL LOCATION} | Vec |
2824+
| main.rs:1884:25:1884:34 | ...::new(...) | | {EXTERNAL LOCATION} | Vec |
2825+
| main.rs:1885:9:1885:13 | vals7 | | {EXTERNAL LOCATION} | Vec |
2826+
| main.rs:1885:20:1885:22 | 1u8 | | {EXTERNAL LOCATION} | u8 |
2827+
| main.rs:1886:18:1886:22 | vals7 | | {EXTERNAL LOCATION} | Vec |
2828+
| main.rs:1888:33:1888:33 | 1 | | {EXTERNAL LOCATION} | i32 |
2829+
| main.rs:1888:36:1888:36 | 2 | | {EXTERNAL LOCATION} | i32 |
2830+
| main.rs:1888:45:1888:45 | 3 | | {EXTERNAL LOCATION} | i32 |
2831+
| main.rs:1888:48:1888:48 | 4 | | {EXTERNAL LOCATION} | i32 |
2832+
| main.rs:1894:13:1894:20 | mut map1 | | {EXTERNAL LOCATION} | HashMap |
2833+
| main.rs:1894:13:1894:20 | mut map1 | S | {EXTERNAL LOCATION} | RandomState |
2834+
| main.rs:1894:24:1894:55 | ...::new(...) | | {EXTERNAL LOCATION} | HashMap |
2835+
| main.rs:1894:24:1894:55 | ...::new(...) | S | {EXTERNAL LOCATION} | RandomState |
2836+
| main.rs:1895:9:1895:12 | map1 | | {EXTERNAL LOCATION} | HashMap |
2837+
| main.rs:1895:9:1895:12 | map1 | S | {EXTERNAL LOCATION} | RandomState |
2838+
| main.rs:1895:9:1895:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option |
2839+
| main.rs:1895:21:1895:21 | 1 | | {EXTERNAL LOCATION} | i32 |
2840+
| main.rs:1895:24:1895:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box |
2841+
| main.rs:1895:33:1895:37 | "one" | | {EXTERNAL LOCATION} | str |
2842+
| main.rs:1896:9:1896:12 | map1 | | {EXTERNAL LOCATION} | HashMap |
2843+
| main.rs:1896:9:1896:12 | map1 | S | {EXTERNAL LOCATION} | RandomState |
2844+
| main.rs:1896:9:1896:39 | map1.insert(...) | | {EXTERNAL LOCATION} | Option |
2845+
| main.rs:1896:21:1896:21 | 2 | | {EXTERNAL LOCATION} | i32 |
2846+
| main.rs:1896:24:1896:38 | ...::new(...) | | {EXTERNAL LOCATION} | Box |
2847+
| main.rs:1896:33:1896:37 | "two" | | {EXTERNAL LOCATION} | str |
2848+
| main.rs:1897:20:1897:23 | map1 | | {EXTERNAL LOCATION} | HashMap |
2849+
| main.rs:1897:20:1897:23 | map1 | S | {EXTERNAL LOCATION} | RandomState |
2850+
| main.rs:1897:20:1897:30 | map1.keys() | | {EXTERNAL LOCATION} | Keys |
2851+
| main.rs:1898:22:1898:25 | map1 | | {EXTERNAL LOCATION} | HashMap |
2852+
| main.rs:1898:22:1898:25 | map1 | S | {EXTERNAL LOCATION} | RandomState |
2853+
| main.rs:1898:22:1898:34 | map1.values() | | {EXTERNAL LOCATION} | Values |
2854+
| main.rs:1899:29:1899:32 | map1 | | {EXTERNAL LOCATION} | HashMap |
2855+
| main.rs:1899:29:1899:32 | map1 | S | {EXTERNAL LOCATION} | RandomState |
2856+
| main.rs:1899:29:1899:39 | map1.iter() | | {EXTERNAL LOCATION} | Iter |
2857+
| main.rs:1900:29:1900:33 | &map1 | | file://:0:0:0:0 | & |
2858+
| main.rs:1900:29:1900:33 | &map1 | &T | {EXTERNAL LOCATION} | HashMap |
2859+
| main.rs:1900:29:1900:33 | &map1 | &T.S | {EXTERNAL LOCATION} | RandomState |
2860+
| main.rs:1900:30:1900:33 | map1 | | {EXTERNAL LOCATION} | HashMap |
2861+
| main.rs:1900:30:1900:33 | map1 | S | {EXTERNAL LOCATION} | RandomState |
2862+
| main.rs:1904:13:1904:17 | mut a | | {EXTERNAL LOCATION} | i32 |
2863+
| main.rs:1904:13:1904:17 | mut a | | {EXTERNAL LOCATION} | i64 |
2864+
| main.rs:1904:26:1904:26 | 0 | | {EXTERNAL LOCATION} | i32 |
2865+
| main.rs:1904:26:1904:26 | 0 | | {EXTERNAL LOCATION} | i64 |
2866+
| main.rs:1905:15:1905:15 | a | | {EXTERNAL LOCATION} | i32 |
2867+
| main.rs:1905:15:1905:15 | a | | {EXTERNAL LOCATION} | i64 |
2868+
| main.rs:1905:15:1905:20 | ... < ... | | {EXTERNAL LOCATION} | bool |
2869+
| main.rs:1905:19:1905:20 | 10 | | {EXTERNAL LOCATION} | i32 |
2870+
| main.rs:1906:13:1906:13 | a | | {EXTERNAL LOCATION} | i32 |
2871+
| main.rs:1906:13:1906:13 | a | | {EXTERNAL LOCATION} | i64 |
2872+
| main.rs:1906:13:1906:18 | ... += ... | | file://:0:0:0:0 | () |
2873+
| main.rs:1906:18:1906:18 | 1 | | {EXTERNAL LOCATION} | i32 |
2874+
| main.rs:1913:5:1913:20 | ...::f(...) | | main.rs:67:5:67:21 | Foo |
2875+
| main.rs:1914:5:1914:60 | ...::g(...) | | main.rs:67:5:67:21 | Foo |
2876+
| main.rs:1914:20:1914:38 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo |
2877+
| main.rs:1914:41:1914:59 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo |
2878+
| main.rs:1930:5:1930:15 | ...::f(...) | | {EXTERNAL LOCATION} | trait Future |
28512879
testFailures

0 commit comments

Comments
 (0)