v/vlib/v/gen/native/tests/assign.vv
2025-09-11 11:47:47 +02:00

184 lines
2.5 KiB
V

const abc = 3
fn main() {
test_int()
test_fp()
test_unsafe()
test_alias(100, 9)
test_plus_assign()
test_minus_assign()
op_assigns_test()
if_expr_op_assigns_test()
}
fn if_expr_op_assigns_test() {
mut b := 1
one := 1
two := 2
three := 3
four := 4
five := 5
ten := 10
b += if false {0} else {one}
b -= if false {0} else {one}
assert b == 1
b |= if false {0} else {two}
assert b == 3
b &= if false {0} else {one}
assert b == 1
b ^= if false {0} else {five}
assert b == 4
b %= if false {0} else {three}
assert b == 1
b *= if false {0} else {ten}
b /= if false {0} else {ten}
assert b == 1
b <<= if false {0} else {four}
b >>>= if false {0} else {two}
b >>= if false {0} else {two}
assert b == 1
mut var := true
t := true
f := false
var &&= if false {f} else {t}
assert var == true
var &&= if false {t} else {f}
assert var == false
var ||= if false {f} else {t}
assert var == true
var ||= if false {t} else {f}
assert var == true
}
fn op_assigns_test() {
mut b := 1
one := 1
two := 2
three := 3
four := 4
five := 5
ten := 10
b += one
b -= one
assert b == 1
b |= two
assert b == 3
b &= one
assert b == 1
b ^= five
assert b == 4
b %= three
assert b == 1
b *= ten
b /= ten
assert b == 1
b <<= four
b >>>= two
b >>= two
assert b == 1
mut var := true
t := true
f := false
var &&= t
assert var == true
var &&= f
assert var == false
var ||= t
assert var == true
var ||= f
assert var == true
}
fn test_minus_assign() {
mut a := 3
a -= 3
assert a == 0
n := 2300
a -= n
assert a == -2300
}
fn test_plus_assign() {
mut a := 3
a += 3
assert a == 6
n := 2300
a += n
assert a == 2306
}
fn test_int() {
mut a := 100
mut b := a
b += b
b += 50
assert b == 250
mut c := u8(b)
d := 4
c += u8(-d)
// TODO: remove the int cast when unsigned integer print will be supported
println(int(c))
mut e := 3
assert e == 3
mut f := &e
assert *f == 3
unsafe{*f = 5}
assert *f == 5
assert e == 5
mut x := abc
assert x == 3
a = 16
a >>>= 2
a >>= 2
a <<= 4
assert a == 16
}
fn test_fp() {
// TODO: implement asserts for floats
a := 10.0
mut b := a
b += 15.0
assert int(b) == 25
b -= 10.0
assert int(b) == 15
b *= 4
assert int(b) == 60
b /= 2
assert int(b) == 30
b += a
assert int(b) == 40
b -= a
assert int(b) == 30
b *= a
assert int(b) == 300
b /= a
assert int(b) == 30
println(int(b))
}
fn test_unsafe() {
a := 10
unsafe {
b := 4
println(a + b)
}
}
type Integer = int
fn test_alias(a Integer, b Integer) {
e := a + b
assert e == a + b
println(int(e))
}