mirror of
https://github.com/slint-ui/slint.git
synced 2025-12-23 09:19:32 +00:00
The compiler was accepting the comparison of types such as color, or
struct, and then later we'd get rust compilation error or interpreter
panic.
Example seen in the crash reporter:
`internal/interpreter/eval.rs:257:35`
```
unsupported Value::Brush(SolidColor(Color { red: 0, green: 0, blue: 0, alpha: 0 })) ≤ Value::Brush(SolidColor(Color { red: 255, green: 0, blue: 0, alpha: 255 }))
```
Note that some code hapenned to compile with rust or C++.
For example, comparison of bool, or anonymous struct (represented as
tuples), or color represeted as int)
So technically this is a breaking change.
But this should be fine as this was not working in the interpreter and
this is a bug fix.
ChangeLog: Slint compilation error for comparison of types that can't be
compared with less or greater operator.
164 lines
4.7 KiB
Text
164 lines
4.7 KiB
Text
// Copyright © SixtyFPS GmbH <info@slint.dev>
|
|
// SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-Slint-Royalty-free-2.0 OR LicenseRef-Slint-Software-3.0
|
|
|
|
TestCase := Rectangle {
|
|
property<int> hello: 44;
|
|
|
|
property<bool> t1: hello == 44 || hello == 45;
|
|
property<bool> t2: hello > 44 && hello < 46;
|
|
property<bool> t3: hello >= 44 && hello <= 46;
|
|
property<bool> t4: t1 || (t2 && t3);
|
|
property<bool> t5: t2 || hello + 3 != 4*10+4;
|
|
property<bool> t6: !t1 || 1 == 0;
|
|
|
|
property<string> my_str: "hello";
|
|
property<bool> t7: my_str == "hello";
|
|
|
|
property<bool> string-cmp: "fooa" < "foob";
|
|
|
|
out property <bool> test: t1 && !t2 && t3 && t4 && t5 && !t6 && t7 && string-cmp;
|
|
}
|
|
/*
|
|
```cpp
|
|
auto handle = TestCase::create();
|
|
const TestCase &instance = *handle;
|
|
assert_eq(instance.get_t1(), true);
|
|
assert_eq(instance.get_t2(), false);
|
|
assert_eq(instance.get_t3(), true);
|
|
assert_eq(instance.get_t4(), true);
|
|
assert_eq(instance.get_t5(), true);
|
|
assert_eq(instance.get_t6(), false);
|
|
assert_eq(instance.get_t7(), true);
|
|
|
|
assert_eq(instance.get_string_cmp(), true);
|
|
assert_eq(instance.get_test(), true);
|
|
|
|
instance.set_hello(45);
|
|
assert_eq(instance.get_t1(), true);
|
|
assert_eq(instance.get_t2(), true);
|
|
assert_eq(instance.get_t3(), true);
|
|
assert_eq(instance.get_t4(), true);
|
|
assert_eq(instance.get_t5(), true);
|
|
assert_eq(instance.get_t6(), false);
|
|
|
|
instance.set_hello(46);
|
|
assert_eq(instance.get_t1(), false);
|
|
assert_eq(instance.get_t2(), false);
|
|
assert_eq(instance.get_t3(), true);
|
|
assert_eq(instance.get_t4(), false);
|
|
assert_eq(instance.get_t5(), true);
|
|
assert_eq(instance.get_t6(), true);
|
|
|
|
instance.set_hello(47);
|
|
assert_eq(instance.get_t1(), false);
|
|
assert_eq(instance.get_t2(), false);
|
|
assert_eq(instance.get_t3(), false);
|
|
assert_eq(instance.get_t4(), false);
|
|
assert_eq(instance.get_t5(), true);
|
|
assert_eq(instance.get_t6(), true);
|
|
|
|
instance.set_hello(41);
|
|
assert_eq(instance.get_t1(), false);
|
|
assert_eq(instance.get_t2(), false);
|
|
assert_eq(instance.get_t3(), false);
|
|
assert_eq(instance.get_t4(), false);
|
|
assert_eq(instance.get_t5(), false);
|
|
assert_eq(instance.get_t6(), true);
|
|
|
|
```
|
|
|
|
|
|
```rust
|
|
let instance = TestCase::new().unwrap();
|
|
|
|
assert_eq!(instance.get_t1(), true);
|
|
assert_eq!(instance.get_t2(), false);
|
|
assert_eq!(instance.get_t3(), true);
|
|
assert_eq!(instance.get_t4(), true);
|
|
assert_eq!(instance.get_t5(), true);
|
|
assert_eq!(instance.get_t6(), false);
|
|
assert_eq!(instance.get_t7(), true);
|
|
|
|
assert_eq!(instance.get_string_cmp(), true);
|
|
assert_eq!(instance.get_test(), true);
|
|
|
|
instance.set_hello(45);
|
|
assert_eq!(instance.get_t1(), true);
|
|
assert_eq!(instance.get_t2(), true);
|
|
assert_eq!(instance.get_t3(), true);
|
|
assert_eq!(instance.get_t4(), true);
|
|
assert_eq!(instance.get_t5(), true);
|
|
assert_eq!(instance.get_t6(), false);
|
|
|
|
instance.set_hello(46);
|
|
assert_eq!(instance.get_t1(), false);
|
|
assert_eq!(instance.get_t2(), false);
|
|
assert_eq!(instance.get_t3(), true);
|
|
assert_eq!(instance.get_t4(), false);
|
|
assert_eq!(instance.get_t5(), true);
|
|
assert_eq!(instance.get_t6(), true);
|
|
|
|
instance.set_hello(47);
|
|
assert_eq!(instance.get_t1(), false);
|
|
assert_eq!(instance.get_t2(), false);
|
|
assert_eq!(instance.get_t3(), false);
|
|
assert_eq!(instance.get_t4(), false);
|
|
assert_eq!(instance.get_t5(), true);
|
|
assert_eq!(instance.get_t6(), true);
|
|
|
|
instance.set_hello(41);
|
|
assert_eq!(instance.get_t1(), false);
|
|
assert_eq!(instance.get_t2(), false);
|
|
assert_eq!(instance.get_t3(), false);
|
|
assert_eq!(instance.get_t4(), false);
|
|
assert_eq!(instance.get_t5(), false);
|
|
assert_eq!(instance.get_t6(), true);
|
|
|
|
```
|
|
|
|
```js
|
|
var instance = new slint.TestCase({});
|
|
assert.equal(instance.t1, true);
|
|
assert.equal(instance.t2, false);
|
|
assert.equal(instance.t3, true);
|
|
assert.equal(instance.t4, true);
|
|
assert.equal(instance.t5, true);
|
|
assert.equal(instance.t6, false);
|
|
assert.equal(instance.t7, true);
|
|
|
|
assert.equal(instance.string_cmp, true);
|
|
assert.equal(instance.test, true);
|
|
|
|
instance.hello = 45;
|
|
assert.equal(instance.t1, true);
|
|
assert.equal(instance.t2, true);
|
|
assert.equal(instance.t3, true);
|
|
assert.equal(instance.t4, true);
|
|
assert.equal(instance.t5, true);
|
|
assert.equal(instance.t6, false);
|
|
|
|
instance.hello = 46;
|
|
assert.equal(instance.t1, false);
|
|
assert.equal(instance.t2, false);
|
|
assert.equal(instance.t3, true);
|
|
assert.equal(instance.t4, false);
|
|
assert.equal(instance.t5, true);
|
|
assert.equal(instance.t6, true);
|
|
|
|
instance.hello = 47;
|
|
assert.equal(instance.t1, false);
|
|
assert.equal(instance.t2, false);
|
|
assert.equal(instance.t3, false);
|
|
assert.equal(instance.t4, false);
|
|
assert.equal(instance.t5, true);
|
|
assert.equal(instance.t6, true);
|
|
|
|
instance.hello = 41;
|
|
assert.equal(instance.t1, false);
|
|
assert.equal(instance.t2, false);
|
|
assert.equal(instance.t3, false);
|
|
assert.equal(instance.t4, false);
|
|
assert.equal(instance.t5, false);
|
|
assert.equal(instance.t6, true);
|
|
```
|
|
*/
|