// algo_test.h // 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. // // Copyright 2005-2010 Google, Inc. // Author: riley@google.com (Michael Riley) // // \file // Regression test for various FST algorithms. #include "./algo_test.h" // These determine which semirings are tested. Defining at least // TEST_TROPICAL and TEST_LOG is recommended. More increase the // comprehensiveness, but also increase the compilation time. #define TEST_TROPICAL #define TEST_LOG // #define TEST_MINMAX // #define TEST_LEFT_STRING // #define TEST_RIGHT_STRING // #define TEST_GALLIC // #define TEST_LEXICOGRAPHIC // #define TEST_POWER DEFINE_int32(seed, -1, "random seed"); DEFINE_int32(repeat, 25, "number of test repetitions"); using fst::StdArc; using fst::TropicalWeightGenerator; using fst::LogArc; using fst::LogWeightGenerator; using fst::MinMaxArc; using fst::MinMaxWeightGenerator; using fst::StringArc; using fst::StringWeightGenerator; using fst::STRING_LEFT; using fst::STRING_RIGHT; using fst::GallicArc; using fst::GallicWeightGenerator; using fst::LexicographicArc; using fst::TropicalWeight; using fst::LexicographicWeightGenerator; using fst::ArcTpl; using fst::PowerWeight; using fst::PowerWeightGenerator; using fst::AlgoTester; int main(int argc, char **argv) { FLAGS_fst_verify_properties = true; std::set_new_handler(FailedNewHandler); SET_FLAGS(argv[0], &argc, &argv, true); static const int kCacheGcLimit = 20; int seed = FLAGS_seed >= 0 ? FLAGS_seed : time(0); srand(seed); LOG(INFO) << "Seed = " << seed; FLAGS_fst_default_cache_gc = rand() % 2; FLAGS_fst_default_cache_gc_limit = rand() % kCacheGcLimit; VLOG(1) << "default_cache_gc:" << FLAGS_fst_default_cache_gc; VLOG(1) << "default_cache_gc_limit:" << FLAGS_fst_default_cache_gc_limit; #ifdef TEST_TROPICAL TropicalWeightGenerator tropical_generator(seed, false); AlgoTester tropical_tester(tropical_generator, seed); tropical_tester.Test(); #endif // TEST_TROPICAL #ifdef TEST_LOG LogWeightGenerator log_generator(seed, false); AlgoTester log_tester(log_generator, seed); log_tester.Test(); #endif // TEST_LOG #ifdef TEST_MINMAX MinMaxWeightGenerator minmax_generator(seed, false); AlgoTester minmax_tester(minmax_generator, seed); minmax_tester.Test(); #endif #ifdef TEST_LEFT_STRING StringWeightGenerator left_string_generator(seed, false); AlgoTester, StringWeightGenerator > left_string_tester(left_string_generator, seed); left_string_tester.Test(); #endif // TEST_LEFT_STRING #ifdef TEST_RIGHT_STRING StringWeightGenerator right_string_generator(seed, false); AlgoTester, StringWeightGenerator > right_string_tester(right_string_generator, seed); right_string_tester.Test(); #endif // TEST_RIGHT_STRING #ifdef TEST_GALLIC typedef GallicArc StdGallicArc; typedef GallicWeightGenerator TropicalGallicWeightGenerator; TropicalGallicWeightGenerator tropical_gallic_generator(seed, false); AlgoTester gallic_tester(tropical_gallic_generator, seed); gallic_tester.Test(); #endif // TEST_GALLIC #ifdef TEST_LEXICOGRAPHIC typedef LexicographicArc TropicalLexicographicArc; typedef LexicographicWeightGenerator TropicalLexicographicWeightGenerator; TropicalLexicographicWeightGenerator lexicographic_generator(seed, false); AlgoTester lexicographic_tester(lexicographic_generator, seed); lexicographic_tester.Test(); #endif // TEST_LEXICOGRAPHIC #ifdef TEST_POWER typedef PowerWeight TropicalCubeWeight; typedef ArcTpl TropicalCubeArc; typedef PowerWeightGenerator TropicalCubeWeightGenerator; TropicalCubeWeightGenerator tropical_cube_generator(seed, false); AlgoTester tropical_cube_tester(tropical_cube_generator, seed); tropical_cube_tester.Test(); #endif // TEST_POWER cout << "PASS" << endl; return 0; }