]> git.lizzy.rs Git - rust.git/blob - src/test/run-pass/binops.rs
56469dbb17262c71411aef3641c82a76a2814494
[rust.git] / src / test / run-pass / binops.rs
1 // Binop corner cases
2
3 use std;
4 import unsafe::reinterpret_cast;
5 import task;
6 import comm;
7
8 fn test_nil() {
9     assert (() == ());
10     assert (!(() != ()));
11     assert (!(() < ()));
12     assert (() <= ());
13     assert (!(() > ()));
14     assert (() >= ());
15 }
16
17 fn test_bool() {
18     assert (!(true < false));
19     assert (!(true <= false));
20     assert (true > false);
21     assert (true >= false);
22
23     assert (false < true);
24     assert (false <= true);
25     assert (!(false > true));
26     assert (!(false >= true));
27
28     // Bools support bitwise binops
29     assert (false & false == false);
30     assert (true & false == false);
31     assert (true & true == true);
32     assert (false | false == false);
33     assert (true | false == true);
34     assert (true | true == true);
35     assert (false ^ false == false);
36     assert (true ^ false == true);
37     assert (true ^ true == false);
38 }
39
40 fn test_char() {
41     let ch10 = 10 as char;
42     let ch4 = 4 as char;
43     let ch2 = 2 as char;
44     assert (ch10 + ch4 == 14 as char);
45     assert (ch10 - ch4 == 6 as char);
46     assert (ch10 * ch4 == 40 as char);
47     assert (ch10 / ch4 == ch2);
48     assert (ch10 % ch4 == ch2);
49     assert (ch10 >> ch2 == ch2);
50     assert (ch10 >>> ch2 == ch2);
51     assert (ch10 << ch4 == 160 as char);
52     assert (ch10 | ch4 == 14 as char);
53     assert (ch10 & ch2 == ch2);
54     assert (ch10 ^ ch2 == 8 as char);
55 }
56
57 fn test_box() {
58     assert (@10 == @10);
59     assert (@{a: 1, b: 3} < @{a: 1, b: 4});
60     assert (@{a: 'x'} != @{a: 'y'});
61 }
62
63 fn test_port() {
64     // FIXME: Re-enable this once we can compare resources.
65     /*
66     let p1 = comm::port::<int>();
67     let p2 = comm::port::<int>();
68
69     assert (p1 == p1);
70     assert (p1 != p2);
71     */
72 }
73
74 fn test_chan() {
75     let p: comm::port<int> = comm::port();
76     let ch1 = comm::chan(p);
77     let ch2 = comm::chan(p);
78
79     assert (ch1 == ch1);
80     // Chans are equal because they are just task:port addresses.
81     assert (ch1 == ch2);
82 }
83
84 fn test_ptr() {
85     // FIXME: Don't know what binops apply to pointers. Don't know how
86     // to make or use pointers
87 }
88
89 fn test_task() {
90     fn f(&&_i: ()) { }
91     let f1 = f, f2 = f;
92     let t1 = task::spawn((), f1);
93     let t2 = task::spawn((), f2);
94
95     assert (t1 == t1);
96     assert (t1 != t2);
97 }
98
99 fn test_fn() {
100     fn f() { }
101     fn g() { }
102     fn h(i: int) { }
103     let f1 = f;
104     let f2 = f;
105     let g1 = g;
106     let h1 = h;
107     let h2 = h;
108     assert (f1 == f2);
109     assert (f1 == f);
110
111     assert (f1 != g1);
112     assert (h1 == h2);
113     assert (!(f1 != f2));
114     assert (!(h1 < h2));
115     assert (h1 <= h2);
116     assert (!(h1 > h2));
117     assert (h1 >= h2);
118 }
119
120 #[abi = "cdecl"]
121 #[nolink]
122 native mod test {
123     fn do_gc();
124     fn unsupervise();
125 }
126
127 // FIXME (#1058): comparison of native fns
128 fn test_native_fn() {
129     /*
130     assert (native_mod::do_gc == native_mod::do_gc);
131     assert (native_mod::do_gc != native_mod::unsupervise);
132     */
133 }
134
135 fn test_obj() {
136     let o1 = obj () { };
137     let o2 = obj () { };
138
139     assert (o1 == o1);
140
141     // FIXME (#815): This doesn't work on linux only. Wierd.
142     //assert (o1 != o2);
143     //assert (!(o1 == o2));
144
145     obj constr1(i: int) { }
146     obj constr2(i: int) { }
147
148     let o5 = constr1(10);
149     let o6 = constr1(10);
150     let o7 = constr1(11);
151     let o8 = constr2(11);
152
153     assert (o5 != o6);
154     assert (o6 != o7);
155     assert (o7 != o8);
156 }
157
158 fn main() {
159     test_nil();
160     test_bool();
161     test_char();
162     test_box();
163     test_port();
164     test_chan();
165     test_ptr();
166     test_task();
167     test_fn();
168     test_native_fn();
169     test_obj();
170 }