diff --git a/python/paddle/trainer_config_helpers/tests/CMakeLists.txt b/python/paddle/trainer_config_helpers/tests/CMakeLists.txt index cf52b06bfea06d6a88b5f11558627936a74bd0b9..78505c85e1b9c8b87612a3f17c294035e221774f 100644 --- a/python/paddle/trainer_config_helpers/tests/CMakeLists.txt +++ b/python/paddle/trainer_config_helpers/tests/CMakeLists.txt @@ -4,7 +4,11 @@ add_test(NAME layers_test python ${PROJ_ROOT}/python/paddle/trainer_config_helpers/tests/layers_test.py WORKING_DIRECTORY ${PROJ_ROOT}/python/paddle) +add_paddle_exe(protobuf_equal + ProtobufEqualMain.cpp) + add_test(NAME test_layerHelpers COMMAND ${PROJ_ROOT}/python/paddle/trainer_config_helpers/tests/configs/run_tests.sh + ${CMAKE_CURRENT_BINARY_DIR}/protobuf_equal ) diff --git a/python/paddle/trainer_config_helpers/tests/ProtobufEqualMain.cpp b/python/paddle/trainer_config_helpers/tests/ProtobufEqualMain.cpp new file mode 100644 index 0000000000000000000000000000000000000000..06f7de9306307e2f92958ef211ec137d54c99d1c --- /dev/null +++ b/python/paddle/trainer_config_helpers/tests/ProtobufEqualMain.cpp @@ -0,0 +1,59 @@ +/* Copyright (c) 2016 Baidu, Inc. All Rights Reserve. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. */ + +#include +#include +#include +#include +#include "TrainerConfig.pb.h" + +bool loadPb(google::protobuf::Message* conf, const std::string& filename) { + std::ifstream fin; + fin.open(filename.c_str()); + if (fin.is_open()) { + std::string str((std::istreambuf_iterator(fin)), + std::istreambuf_iterator()); + bool ok = google::protobuf::TextFormat::ParseFromString(str, conf); + fin.close(); + return ok; + } else { + return false; + } +} + +int main(int argc, char** argv) { + std::unique_ptr config1; + std::unique_ptr config2; + if (argc == 3) { + config1.reset(new paddle::ModelConfig()); + config2.reset(new paddle::ModelConfig()); + } else if (argc == 4) { + config1.reset(new paddle::TrainerConfig()); + config2.reset(new paddle::TrainerConfig()); + } + if (!config1 || !config2) { + return 1; + } else if (!loadPb(config1.get(), argv[1])) { + return 2; + } else if (!loadPb(config2.get(), argv[2])) { + return 3; + } else { + if (google::protobuf::util::MessageDifferencer::ApproximatelyEquals( + *config1, *config2)) { + return 0; + } else { + return 4; + } + } +} diff --git a/python/paddle/trainer_config_helpers/tests/configs/.gitignore b/python/paddle/trainer_config_helpers/tests/configs/.gitignore index eb646b4a71ec1ac0e7992aabf2992fef7a9264a0..c654bd41b0b4dd0cb510943540b660b4e4a147d9 100644 --- a/python/paddle/trainer_config_helpers/tests/configs/.gitignore +++ b/python/paddle/trainer_config_helpers/tests/configs/.gitignore @@ -1 +1 @@ -protostr/*.unitest +protostr/*.unittest diff --git a/python/paddle/trainer_config_helpers/tests/configs/file_list.sh b/python/paddle/trainer_config_helpers/tests/configs/file_list.sh new file mode 100755 index 0000000000000000000000000000000000000000..3f1d99701afe5425553feb129c7619b5e3e689fa --- /dev/null +++ b/python/paddle/trainer_config_helpers/tests/configs/file_list.sh @@ -0,0 +1,9 @@ +#!/bin/bash +export configs=(test_fc layer_activations projections test_print_layer +test_sequence_pooling test_lstmemory_layer test_grumemory_layer +last_first_seq test_expand_layer test_ntm_layers test_hsigmoid +img_layers img_trans_layers util_layers simple_rnn_layers unused_layers test_cost_layers +test_rnn_group shared_fc shared_lstm test_cost_layers_with_weight +test_spp_layer test_bilinear_interp test_maxout test_bi_grumemory math_ops) + +export whole_configs=(test_split_datasource) diff --git a/python/paddle/trainer_config_helpers/tests/configs/generate_protostr.sh b/python/paddle/trainer_config_helpers/tests/configs/generate_protostr.sh index bb594ac2c245d8882569ba2c3cf00623a8fa8e2c..e55f9bd3884a907dcc17a882e3c1dfd71fef79bb 100755 --- a/python/paddle/trainer_config_helpers/tests/configs/generate_protostr.sh +++ b/python/paddle/trainer_config_helpers/tests/configs/generate_protostr.sh @@ -5,24 +5,16 @@ cd `dirname $0` export PYTHONPATH=$PWD/../../../../ protostr=$PWD/protostr - -configs=(test_fc layer_activations projections test_print_layer -test_sequence_pooling test_lstmemory_layer test_grumemory_layer -last_first_seq test_expand_layer test_ntm_layers test_hsigmoid -img_layers img_trans_layers util_layers simple_rnn_layers unused_layers test_cost_layers -test_rnn_group shared_fc shared_lstm test_cost_layers_with_weight -test_spp_layer test_bilinear_interp test_maxout test_bi_grumemory math_ops) - -whole_configs=(test_split_datasource) +. file_list.sh for conf in ${configs[*]} do echo "Generating " $conf - python -m paddle.utils.dump_config $conf.py > $protostr/$conf.protostr.unitest + python -m paddle.utils.dump_config $conf.py > $protostr/$conf.protostr.unittest done for conf in ${whole_configs[*]} do echo "Generating " $conf - python -m paddle.utils.dump_config $conf.py "" --whole > $protostr/$conf.protostr.unitest + python -m paddle.utils.dump_config $conf.py "" --whole > $protostr/$conf.protostr.unittest done diff --git a/python/paddle/trainer_config_helpers/tests/configs/run_tests.sh b/python/paddle/trainer_config_helpers/tests/configs/run_tests.sh index 968328835842667470467830c7ca59e4b9fa723d..5f6ed91030bc54481495f42539e3581eefc64b1a 100755 --- a/python/paddle/trainer_config_helpers/tests/configs/run_tests.sh +++ b/python/paddle/trainer_config_helpers/tests/configs/run_tests.sh @@ -9,9 +9,27 @@ files=`ls $protostr | grep -v "unitest"` ./generate_protostr.sh -for file in $files -do - base_protostr=$protostr/$file - new_protostr=$protostr/$file.unitest - diff $base_protostr $new_protostr -u -done +. ./file_list.sh + +if [ -z $1 ]; then + for file in $files + do + base_protostr=$protostr/$file + new_protostr=$protostr/$file.unittest + diff $base_protostr $new_protostr -u + done +else + for file in ${configs[*]} + do + if ! $1 $protostr/$file.protostr $protostr/$file.protostr.unittest; then + diff $protostr/$file.protostr $protostr/$file.protostr.unittest -u + fi + done + + for file in ${whole_configs[*]} + do + if ! $1 $protostr/$file.protostr $protostr/$file.protostr.unittest --whole; then + diff $protostr/$file.protostr $protostr/$file.protostr.unittest -u + fi + done +fi