diff --git a/Jenkinsfile b/Jenkinsfile index 39faea8fa68c..dfe01aa979f7 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -21,7 +21,7 @@ def build_dgl() { } } -def unit_test() { +def pytorch_unit_test() { withEnv(["DGL_LIBRARY_PATH=${env.WORKSPACE}/build"]) { sh 'nosetests tests -v --with-xunit' sh 'nosetests tests/pytorch -v --with-xunit' @@ -29,6 +29,12 @@ def unit_test() { } } +def mxnet_unit_test() { + withEnv(["DGL_LIBRARY_PATH=${env.WORKSPACE}/build"]) { + sh 'nosetests tests/mxnet -v --with-xunit' + } +} + def example_test(dev) { dir ('tests/scripts') { withEnv(["DGL_LIBRARY_PATH=${env.WORKSPACE}/build"]) { @@ -55,7 +61,7 @@ pipeline { } } } - stage('Build and Test') { + stage('Build and Test on Pytorch') { parallel { stage('CPU') { agent { @@ -76,7 +82,7 @@ pipeline { } stage('UNIT TEST') { steps { - unit_test() + pytorch_unit_test() } } stage('EXAMPLE TEST') { @@ -111,7 +117,7 @@ pipeline { } stage('UNIT TEST') { steps { - unit_test() + pytorch_unit_test() } } stage('EXAMPLE TEST') { @@ -128,5 +134,43 @@ pipeline { } } } + stage('Build and Test on MXNet') { + parallel { + stage('CPU') { + agent { + docker { + image 'zhengda1936/dgl-mxnet-cpu:v2' + } + } + stages { + stage('SETUP') { + steps { + setup() + } + } + stage('BUILD') { + steps { + build_dgl() + } + } + stage('UNIT TEST') { + steps { + mxnet_unit_test() + } + } + stage('EXAMPLE TEST') { + steps { + example_test('CPU') + } + } + } + post { + always { + junit '*.xml' + } + } + } + } + } } } diff --git a/tests/mxnet/test_basics.py b/tests/mxnet/test_basics.py index b814e7fd3c12..ba49ee01bcc5 100644 --- a/tests/mxnet/test_basics.py +++ b/tests/mxnet/test_basics.py @@ -209,14 +209,13 @@ def test_reduce_0deg(): g.add_edge(3, 0) g.add_edge(4, 0) def _message(src, edge): - return src + return {'m' : src['h']} def _reduce(node, msgs): - assert msgs is not None - return node + msgs.sum(1) + return {'h' : node['h'] + msgs['m'].sum(1)} old_repr = mx.nd.random.normal(shape=(5, 5)) - g.set_n_repr(old_repr) + g.set_n_repr({'h': old_repr}) g.update_all(_message, _reduce) - new_repr = g.get_n_repr() + new_repr = g.get_n_repr()['h'] assert np.allclose(new_repr[1:].asnumpy(), old_repr[1:].asnumpy()) assert np.allclose(new_repr[0].asnumpy(), old_repr.sum(0).asnumpy()) @@ -226,25 +225,24 @@ def test_pull_0deg(): g.add_nodes(2) g.add_edge(0, 1) def _message(src, edge): - return src + return {'m' : src['h']} def _reduce(node, msgs): - assert msgs is not None - return msgs.sum(1) + return {'h' : msgs['m'].sum(1)} old_repr = mx.nd.random.normal(shape=(2, 5)) - g.set_n_repr(old_repr) + g.set_n_repr({'h' : old_repr}) g.pull(0, _message, _reduce) - new_repr = g.get_n_repr() + new_repr = g.get_n_repr()['h'] assert np.allclose(new_repr[0].asnumpy(), old_repr[0].asnumpy()) assert np.allclose(new_repr[1].asnumpy(), old_repr[1].asnumpy()) g.pull(1, _message, _reduce) - new_repr = g.get_n_repr() + new_repr = g.get_n_repr()['h'] assert np.allclose(new_repr[1].asnumpy(), old_repr[0].asnumpy()) old_repr = mx.nd.random.normal(shape=(2, 5)) - g.set_n_repr(old_repr) + g.set_n_repr({'h' : old_repr}) g.pull([0, 1], _message, _reduce) - new_repr = g.get_n_repr() + new_repr = g.get_n_repr()['h'] assert np.allclose(new_repr[0].asnumpy(), old_repr[0].asnumpy()) assert np.allclose(new_repr[1].asnumpy(), old_repr[0].asnumpy())