|
|
|
project('plusassign', 'c')
|
|
|
|
|
|
|
|
x = []
|
|
|
|
|
|
|
|
x += 'a'
|
|
|
|
|
|
|
|
if x.length() != 1
|
|
|
|
error('Incorrect append')
|
|
|
|
endif
|
|
|
|
|
|
|
|
if x[0] != 'a'
|
|
|
|
error('Incorrect append 2.')
|
|
|
|
endif
|
|
|
|
|
|
|
|
y = x
|
|
|
|
|
|
|
|
x += 'b'
|
|
|
|
|
|
|
|
if y.length() != 1
|
|
|
|
error('Immutability broken.')
|
|
|
|
endif
|
|
|
|
|
|
|
|
if y[0] != 'a'
|
|
|
|
error('Immutability broken 2.')
|
|
|
|
endif
|
|
|
|
|
|
|
|
if x.length() != 2
|
|
|
|
error('Incorrect append 3')
|
|
|
|
endif
|
|
|
|
|
|
|
|
if x[0] != 'a'
|
|
|
|
error('Incorrect append 4.')
|
|
|
|
endif
|
|
|
|
|
|
|
|
if x[1] != 'b'
|
|
|
|
error('Incorrect append 5.')
|
|
|
|
endif
|
|
|
|
|
|
|
|
# Now with evil added: append yourself.
|
|
|
|
|
|
|
|
x += x
|
|
|
|
|
|
|
|
if x.length() != 4
|
|
|
|
error('Incorrect selfappend.')
|
|
|
|
endif
|
|
|
|
|
|
|
|
# += on strings
|
|
|
|
|
|
|
|
bra = 'bra'
|
|
|
|
foo = 'A'
|
|
|
|
foo += bra
|
|
|
|
foo += 'cada'
|
|
|
|
foo += bra
|
|
|
|
assert (foo == 'Abracadabra', 'string += failure [@0@]'.format(foo))
|
|
|
|
assert (bra == 'bra', 'string += modified right argument!')
|
|
|
|
foo += ' ' + foo
|
|
|
|
assert (foo == 'Abracadabra Abracadabra', 'string += failure [@0@]'.format(foo))
|
|
|
|
|
|
|
|
# += on ints
|
|
|
|
|
|
|
|
foo = 5
|
|
|
|
foo += 6
|
|
|
|
assert (foo == 11, 'int += failure [@0@]'.format(foo))
|
|
|
|
bar = 99
|
|
|
|
foo += bar
|
|
|
|
assert (foo == 110, 'int += failure [@0@]'.format(foo))
|
|
|
|
assert (bar == 99, 'int += modified right argument"')
|
|
|
|
bar += foo + 1
|
|
|
|
assert (bar == 210, 'int += failure [@0@]'.format(bar))
|
|
|
|
assert (foo == 110, 'int += modified right argument"')
|