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"')