diff options
Diffstat (limited to 'src/boost/libs/mpi/test/python/skeleton_content_test.py')
-rw-r--r-- | src/boost/libs/mpi/test/python/skeleton_content_test.py | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/src/boost/libs/mpi/test/python/skeleton_content_test.py b/src/boost/libs/mpi/test/python/skeleton_content_test.py new file mode 100644 index 000000000..1dfde3cf7 --- /dev/null +++ b/src/boost/libs/mpi/test/python/skeleton_content_test.py @@ -0,0 +1,75 @@ +# Copyright (C) 2006 Douglas Gregor <doug.gregor -at- gmail.com>. + +# Use, modification and distribution is subject to the Boost Software +# License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +# Test skeleton/content + +import boost.parallel.mpi as mpi +import skeleton_content + +def test_skeleton_and_content(comm, root, manual_broadcast = True): + assert manual_broadcast + + # Setup data + list_size = comm.size + 7 + original_list = skeleton_content.list_int() + for i in range(0,list_size): + original_list.push_back(i) + + if comm.rank == root: + # Broadcast skeleton + print ("Broadcasting integer list skeleton from root %d..." % (root)), + if manual_broadcast: + for p in range(0,comm.size): + if p != comm.rank: + comm.send(p, 0, value = mpi.skeleton(original_list)) + print "OK." + + # Broadcast content + print ("Broadcasting integer list content from root %d..." % (root)), + if manual_broadcast: + for p in range(0,comm.size): + if p != comm.rank: + comm.send(p, 0, value = mpi.get_content(original_list)) + + print "OK." + + # Broadcast reversed content + original_list.reverse() + print ("Broadcasting reversed integer list content from root %d..." % (root)), + if manual_broadcast: + for p in range(0,comm.size): + if p != comm.rank: + comm.send(p, 0, value = mpi.get_content(original_list)) + + print "OK." + else: + # Allocate some useless data, to try to get the addresses of + # the underlying lists used later to be different across + # processors. + junk_list = skeleton_content.list_int() + for i in range(0,comm.rank * 3 + 1): + junk_list.push_back(i) + + # Receive the skeleton of the list + if manual_broadcast: + transferred_list_skeleton = comm.recv(root, 0) + assert transferred_list_skeleton.object.size == list_size + + # Receive the content and check it + transferred_list = transferred_list_skeleton.object + if manual_broadcast: + comm.recv(root, 0, mpi.get_content(transferred_list)) + assert transferred_list == original_list + + # Receive the content (again) and check it + original_list.reverse() + if manual_broadcast: + comm.recv(root, 0, mpi.get_content(transferred_list)) + assert transferred_list == original_list + + +test_skeleton_and_content(mpi.world, 0) +test_skeleton_and_content(mpi.world, 1) |