Skip to content

Commit

Permalink
[master] tests for setf-move-init and setf-move-assign (#43)
Browse files Browse the repository at this point in the history
  • Loading branch information
tomhrr committed Mar 19, 2016
1 parent b7fe429 commit 24bbfe4
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 10 deletions.
51 changes: 51 additions & 0 deletions t/001basic/109rv-refs-setf-move.t
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
#!/usr/bin/perl

use warnings;
use strict;
$ENV{"DALE_TEST_ARGS"} ||= "";
my $test_dir = $ENV{"DALE_TEST_DIR"} || ".";
$ENV{PATH} .= ":.";

use Data::Dumper;
use Test::More tests => 4;

my @res = `dalec $ENV{"DALE_TEST_ARGS"} $test_dir/t/src/rv-refs-setf-move.dt -o rv-refs-setf-move`;
is(@res, 4, 'Four compilation statements');
chomp for @res;
is_deeply(\@res, [
'setf-copy-init',
'setf-copy-assign',
'setf-move-assign',
'setf-move-assign',
], 'Got expected results');

@res = `./rv-refs-setf-move`;
is($?, 0, 'Program executed successfully');

chomp for @res;

is_deeply(\@res, [
'Previously: two setf-move-inits',
'One setf-move-init',
'setf-move-init',
'One setf-move-assign',
'setf-move-assign',
'One setf-move-init',
'setf-move-init',
'Two setf-move-inits',
'setf-move-init',
'setf-move-init',
'Preswap',
'1 2',
'1 3',
'setf-move-init',
'setf-move-assign',
'setf-move-assign',
'Postswap',
'1 3',
'1 2',
], 'Got expected results');

`rm rv-refs-setf-move`;

1;
32 changes: 22 additions & 10 deletions t/src/rv-refs-setf-move.dt
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,14 @@
(b (ref mys)))
(let ((temp \ (move (@ a))))
(setf a (move (@ b)))
;(setf b (move (@ temp)))
(setf b (move temp))
(return))))

; Calling this function should cause no copies to occur.
(def swap (fn extern void ((a (rv-ref mys))
(b (rv-ref mys)))
(let ((temp \ (move (@ a))))
(setf a (move (@ b)))
(setf b (move temp))
(return))))

Expand All @@ -53,14 +60,17 @@
(def d (var auto mys (move n)))
true))

;(def ga (var intern mys ((a 1) (b 2))))
;(def gb (var intern mys (move ga)))
;(def gc (var intern mys (move gb)))
(def ga (var intern mys ((a 1) (b 2))))
(def gb (var intern mys (move ga)))
(def gc (var intern mys (move gb)))

(def main (fn extern-c int (void)
(def a (var auto mys (init a 1 2)))
(def b (var auto mys (init b 1 3)))
(printf "Previously: two setf-move-inits\n")
(printf "One setf-move-init\n")
(def c (var auto mys (move a)))
(printf "One setf-move-assign\n")
(setv c (move b))
(printf "One setf-move-init\n")
(rv-ref-use (move c))
Expand All @@ -69,10 +79,12 @@
(printf "Two setf-move-inits\n")
(rv-ref-use2 (move e))

; (printf "Preswap\n")
; (swap a b)
; (printf "Postswap\n")
; (printf "%d %d\n" (@: a a) (@: a b))
; (printf "%d %d\n" (@: b a) (@: b b))
0))
(printf "Preswap\n")
(printf "%d %d\n" (@: a a) (@: a b))
(printf "%d %d\n" (@: b a) (@: b b))

(swap (move a) (move b))
(printf "Postswap\n")
(printf "%d %d\n" (@: a a) (@: a b))
(printf "%d %d\n" (@: b a) (@: b b))
0))

0 comments on commit 24bbfe4

Please sign in to comment.