/* Copyright (C) 2008-2012 Børre Gaup This file is part of the program wordlist2hunspell. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #define private public // dirty trick to make private functions available for testing :D // place includes for classes that should be test below this line #include "../wordlistparserall.h" #include "../setoptimizer.h" extern std::istream* setupinputfile(); std::set< std::set > setupsuffixsets() { std::set< std::set > s; std::set suffixes; suffixes.insert(1); suffixes.insert(2); suffixes.insert(3); suffixes.insert(4); suffixes.insert(5); suffixes.insert(6); suffixes.insert(7); suffixes.insert(8); suffixes.insert(9); suffixes.insert(10); suffixes.insert(11); suffixes.insert(12); suffixes.insert(13); suffixes.insert(14); suffixes.insert(15); suffixes.insert(16); suffixes.insert(17); s.insert(suffixes); suffixes.clear(); suffixes.insert(1); suffixes.insert(4); suffixes.insert(5); suffixes.insert(6); suffixes.insert(7); suffixes.insert(9); s.insert(suffixes); suffixes.clear(); suffixes.insert(1); suffixes.insert(4); suffixes.insert(5); suffixes.insert(6); suffixes.insert(7); suffixes.insert(9); suffixes.insert(14); suffixes.insert(15); s.insert(suffixes); suffixes.clear(); suffixes.insert(4); s.insert(suffixes); suffixes.clear(); suffixes.insert(14); suffixes.insert(15); suffixes.insert(16); suffixes.insert(17); suffixes.insert(18); suffixes.insert(19); s.insert(suffixes); suffixes.clear(); suffixes.insert(17); suffixes.insert(33); suffixes.insert(34); suffixes.insert(35); suffixes.insert(36); suffixes.insert(37); suffixes.insert(38); suffixes.insert(39); suffixes.insert(40); suffixes.insert(41); suffixes.insert(42); suffixes.insert(43); suffixes.insert(44); suffixes.insert(45); s.insert(suffixes); suffixes.clear(); suffixes.insert(17); suffixes.insert(33); suffixes.insert(34); suffixes.insert(35); suffixes.insert(36); suffixes.insert(39); suffixes.insert(40); suffixes.insert(41); s.insert(suffixes); suffixes.clear(); suffixes.insert(17); suffixes.insert(39); suffixes.insert(40); suffixes.insert(41); s.insert(suffixes); suffixes.clear(); suffixes.insert(19); s.insert(suffixes); suffixes.clear(); suffixes.insert(20); suffixes.insert(21); suffixes.insert(22); suffixes.insert(23); suffixes.insert(24); suffixes.insert(25); suffixes.insert(26); suffixes.insert(27); s.insert(suffixes); suffixes.clear(); suffixes.insert(26); suffixes.insert(27); s.insert(suffixes); suffixes.clear(); suffixes.insert(26); suffixes.insert(27); suffixes.insert(97); suffixes.insert(98); s.insert(suffixes); suffixes.clear(); suffixes.insert(28); suffixes.insert(29); s.insert(suffixes); suffixes.clear(); suffixes.insert(28); suffixes.insert(95); suffixes.insert(96); s.insert(suffixes); suffixes.clear(); suffixes.insert(30); suffixes.insert(31); suffixes.insert(32); s.insert(suffixes); suffixes.clear(); suffixes.insert(46); suffixes.insert(47); suffixes.insert(48); suffixes.insert(49); suffixes.insert(50); suffixes.insert(51); suffixes.insert(52); suffixes.insert(53); suffixes.insert(54); suffixes.insert(55); suffixes.insert(56); suffixes.insert(57); suffixes.insert(58); suffixes.insert(59); suffixes.insert(60); suffixes.insert(61); suffixes.insert(62); suffixes.insert(63); suffixes.insert(64); suffixes.insert(65); suffixes.insert(66); suffixes.insert(67); suffixes.insert(68); suffixes.insert(69); s.insert(suffixes); suffixes.clear(); suffixes.insert(70); s.insert(suffixes); suffixes.clear(); suffixes.insert(71); s.insert(suffixes); suffixes.clear(); suffixes.insert(72); s.insert(suffixes); suffixes.clear(); suffixes.insert(73); suffixes.insert(74); suffixes.insert(75); s.insert(suffixes); suffixes.clear(); suffixes.insert(76); suffixes.insert(77); suffixes.insert(78); s.insert(suffixes); suffixes.clear(); suffixes.insert(79); suffixes.insert(80); suffixes.insert(81); suffixes.insert(82); suffixes.insert(83); suffixes.insert(84); suffixes.insert(85); suffixes.insert(86); suffixes.insert(87); s.insert(suffixes); suffixes.clear(); suffixes.insert(88); s.insert(suffixes); suffixes.clear(); suffixes.insert(89); suffixes.insert(90); suffixes.insert(91); s.insert(suffixes); suffixes.clear(); suffixes.insert(92); suffixes.insert(93); suffixes.insert(94); s.insert(suffixes); suffixes.clear(); return s; } TEST(TestGetAffixSetsFromStems) { std::istream* inputfile = setupinputfile(); WordlistParserAll wp; wp.processFile(inputfile); SetOptimizer so(wp.getSuffixSetStemSet()); std::set< std::set > got = so.getSuffixSetsFromStems(); std::set< std::set > want = setupsuffixsets(); CHECK_EQUAL(want.size(), got.size()); CHECK(equal(got.begin(), got.end(), want.begin())); } std::set< std::set > setupsuffixsubsets() { std::set< std::set > s; std::set suffixes; suffixes.insert(1); suffixes.insert(5); suffixes.insert(6); suffixes.insert(7); suffixes.insert(9); s.insert(suffixes); suffixes.clear(); suffixes.insert(2); suffixes.insert(3); suffixes.insert(8); suffixes.insert(10); suffixes.insert(11); suffixes.insert(12); suffixes.insert(13); s.insert(suffixes); suffixes.clear(); suffixes.insert(4); s.insert(suffixes); suffixes.clear(); suffixes.insert(14); suffixes.insert(15); s.insert(suffixes); suffixes.clear(); suffixes.insert(16); s.insert(suffixes); suffixes.clear(); suffixes.insert(17); s.insert(suffixes); suffixes.clear(); suffixes.insert(18); s.insert(suffixes); suffixes.clear(); suffixes.insert(19); s.insert(suffixes); suffixes.clear(); suffixes.insert(20); suffixes.insert(21); suffixes.insert(22); suffixes.insert(23); suffixes.insert(24); suffixes.insert(25); s.insert(suffixes); suffixes.clear(); suffixes.insert(26); suffixes.insert(27); s.insert(suffixes); suffixes.clear(); suffixes.insert(28); s.insert(suffixes); suffixes.clear(); suffixes.insert(29); s.insert(suffixes); suffixes.clear(); suffixes.insert(30); suffixes.insert(31); suffixes.insert(32); s.insert(suffixes); suffixes.clear(); suffixes.insert(33); suffixes.insert(34); suffixes.insert(35); suffixes.insert(36); s.insert(suffixes); suffixes.clear(); suffixes.insert(37); suffixes.insert(38); suffixes.insert(42); suffixes.insert(43); suffixes.insert(44); suffixes.insert(45); s.insert(suffixes); suffixes.clear(); suffixes.insert(39); suffixes.insert(40); suffixes.insert(41); s.insert(suffixes); suffixes.clear(); suffixes.insert(46); suffixes.insert(47); suffixes.insert(48); suffixes.insert(49); suffixes.insert(50); suffixes.insert(51); suffixes.insert(52); suffixes.insert(53); suffixes.insert(54); suffixes.insert(55); suffixes.insert(56); suffixes.insert(57); suffixes.insert(58); suffixes.insert(59); suffixes.insert(60); suffixes.insert(61); suffixes.insert(62); suffixes.insert(63); suffixes.insert(64); suffixes.insert(65); suffixes.insert(66); suffixes.insert(67); suffixes.insert(68); suffixes.insert(69); s.insert(suffixes); suffixes.clear(); suffixes.insert(70); s.insert(suffixes); suffixes.clear(); suffixes.insert(71); s.insert(suffixes); suffixes.clear(); suffixes.insert(72); s.insert(suffixes); suffixes.clear(); suffixes.insert(73); suffixes.insert(74); suffixes.insert(75); s.insert(suffixes); suffixes.clear(); suffixes.insert(76); suffixes.insert(77); suffixes.insert(78); s.insert(suffixes); suffixes.clear(); suffixes.insert(79); suffixes.insert(80); suffixes.insert(81); suffixes.insert(82); suffixes.insert(83); suffixes.insert(84); suffixes.insert(85); suffixes.insert(86); suffixes.insert(87); s.insert(suffixes); suffixes.clear(); suffixes.insert(88); s.insert(suffixes); suffixes.clear(); suffixes.insert(89); suffixes.insert(90); suffixes.insert(91); s.insert(suffixes); suffixes.clear(); suffixes.insert(92); suffixes.insert(93); suffixes.insert(94); s.insert(suffixes); suffixes.clear(); suffixes.insert(95); suffixes.insert(96); s.insert(suffixes); suffixes.clear(); suffixes.insert(97); suffixes.insert(98); s.insert(suffixes); suffixes.clear(); return s; } TEST(TestSplitAffixSetsIntoSubSets) { std::istream* inputfile = setupinputfile(); WordlistParserAll wp; wp.processFile(inputfile); SetOptimizer so(wp.getSuffixSetStemSet()); std::set< std::set > got = so.splitSuffixSetsIntoSubSets(); std::set< std::set > want= setupsuffixsubsets(); CHECK_EQUAL(want.size(), got.size()); CHECK(equal(got.begin(), got.end(), want.begin())); } std::map< int, std::set > setupsuffixsubsetsmap() { std::map< int, std::set > s; std::set suffixes; suffixes.insert(1); suffixes.insert(5); suffixes.insert(6); suffixes.insert(7); suffixes.insert(9); s.insert(std::pair >(1, suffixes)); suffixes.clear(); suffixes.insert(2); suffixes.insert(3); suffixes.insert(8); suffixes.insert(10); suffixes.insert(11); suffixes.insert(12); suffixes.insert(13); s.insert(std::pair >(2, suffixes)); suffixes.clear(); suffixes.insert(4); s.insert(std::pair >(3, suffixes)); suffixes.clear(); suffixes.insert(14); suffixes.insert(15); s.insert(std::pair >(4, suffixes)); suffixes.clear(); suffixes.insert(16); s.insert(std::pair >(5, suffixes)); suffixes.clear(); suffixes.insert(17); s.insert(std::pair >(6, suffixes)); suffixes.clear(); suffixes.insert(18); s.insert(std::pair >(7, suffixes)); suffixes.clear(); suffixes.insert(19); s.insert(std::pair >(8, suffixes)); suffixes.clear(); suffixes.insert(20); suffixes.insert(21); suffixes.insert(22); suffixes.insert(23); suffixes.insert(24); suffixes.insert(25); s.insert(std::pair >(9, suffixes)); suffixes.clear(); suffixes.insert(26); suffixes.insert(27); s.insert(std::pair >(10, suffixes)); suffixes.clear(); suffixes.insert(28); s.insert(std::pair >(11, suffixes)); suffixes.clear(); suffixes.insert(29); s.insert(std::pair >(12, suffixes)); suffixes.clear(); suffixes.insert(30); suffixes.insert(31); suffixes.insert(32); s.insert(std::pair >(13, suffixes)); suffixes.clear(); suffixes.insert(33); suffixes.insert(34); suffixes.insert(35); suffixes.insert(36); s.insert(std::pair >(14, suffixes)); suffixes.clear(); suffixes.insert(37); suffixes.insert(38); suffixes.insert(42); suffixes.insert(43); suffixes.insert(44); suffixes.insert(45); s.insert(std::pair >(15, suffixes)); suffixes.clear(); suffixes.insert(39); suffixes.insert(40); suffixes.insert(41); s.insert(std::pair >(16, suffixes)); suffixes.clear(); suffixes.insert(46); suffixes.insert(47); suffixes.insert(48); suffixes.insert(49); suffixes.insert(50); suffixes.insert(51); suffixes.insert(52); suffixes.insert(53); suffixes.insert(54); suffixes.insert(55); suffixes.insert(56); suffixes.insert(57); suffixes.insert(58); suffixes.insert(59); suffixes.insert(60); suffixes.insert(61); suffixes.insert(62); suffixes.insert(63); suffixes.insert(64); suffixes.insert(65); suffixes.insert(66); suffixes.insert(67); suffixes.insert(68); suffixes.insert(69); s.insert(std::pair >(17, suffixes)); suffixes.clear(); suffixes.insert(70); s.insert(std::pair >(18, suffixes)); suffixes.clear(); suffixes.insert(71); s.insert(std::pair >(19, suffixes)); suffixes.clear(); suffixes.insert(72); s.insert(std::pair >(20, suffixes)); suffixes.clear(); suffixes.insert(73); suffixes.insert(74); suffixes.insert(75); s.insert(std::pair >(21, suffixes)); suffixes.clear(); suffixes.insert(76); suffixes.insert(77); suffixes.insert(78); s.insert(std::pair >(22, suffixes)); suffixes.clear(); suffixes.insert(79); suffixes.insert(80); suffixes.insert(81); suffixes.insert(82); suffixes.insert(83); suffixes.insert(84); suffixes.insert(85); suffixes.insert(86); suffixes.insert(87); s.insert(std::pair >(23, suffixes)); suffixes.clear(); suffixes.insert(88); s.insert(std::pair >(24, suffixes)); suffixes.clear(); suffixes.insert(89); suffixes.insert(90); suffixes.insert(91); s.insert(std::pair >(25, suffixes)); suffixes.clear(); suffixes.insert(92); suffixes.insert(93); suffixes.insert(94); s.insert(std::pair >(26, suffixes)); suffixes.clear(); suffixes.insert(95); suffixes.insert(96); s.insert(std::pair >(27, suffixes)); suffixes.clear(); suffixes.insert(97); suffixes.insert(98); s.insert(std::pair >(28, suffixes)); suffixes.clear(); return s; } TEST(mapSubSets) { std::istream* inputfile = setupinputfile(); WordlistParserAll wp; wp.processFile(inputfile); SetOptimizer so(wp.getSuffixSetStemSet()); std::map< int, std::set > got = so.getSuffixMap(); std::map< int, std::set > want = setupsuffixsubsetsmap(); CHECK_EQUAL(want.size(), got.size()); CHECK(equal(got.begin(), got.end(), want.begin())); } std::map, std::set > setupsuffixstemmap2() { std::map, std::set > s; std::set suffixes; std::set stems; suffixes.insert(1); suffixes.insert(2); suffixes.insert(3); suffixes.insert(4); suffixes.insert(5); suffixes.insert(6); stems.insert(1); s.insert(std::pair, std::set >(suffixes, stems)); suffixes.clear(); stems.clear(); suffixes.insert(1); suffixes.insert(3); stems.insert(5); s.insert(std::pair, std::set >(suffixes, stems)); suffixes.clear(); stems.clear(); suffixes.insert(1); suffixes.insert(3); suffixes.insert(4); stems.insert(3); s.insert(std::pair, std::set >(suffixes, stems)); suffixes.clear(); stems.clear(); suffixes.insert(3); stems.insert(24); stems.insert(25); stems.insert(27); s.insert(std::pair, std::set >(suffixes, stems)); suffixes.clear(); stems.clear(); suffixes.insert(4); suffixes.insert(5); suffixes.insert(6); suffixes.insert(7); suffixes.insert(8); stems.insert(2); s.insert(std::pair, std::set >(suffixes, stems)); suffixes.clear(); stems.clear(); suffixes.insert(6); suffixes.insert(14); suffixes.insert(15); suffixes.insert(16); stems.insert(14); s.insert(std::pair, std::set >(suffixes, stems)); suffixes.clear(); stems.clear(); suffixes.insert(6); suffixes.insert(14); suffixes.insert(16); stems.insert(15); s.insert(std::pair, std::set >(suffixes, stems)); suffixes.clear(); stems.clear(); suffixes.insert(6); suffixes.insert(16); stems.insert(16); s.insert(std::pair, std::set >(suffixes, stems)); suffixes.clear(); stems.clear(); suffixes.insert(8); stems.insert(4); stems.insert(6); s.insert(std::pair, std::set >(suffixes, stems)); suffixes.clear(); stems.clear(); suffixes.insert(9); suffixes.insert(10); stems.insert(7); s.insert(std::pair, std::set >(suffixes, stems)); suffixes.clear(); stems.clear(); suffixes.insert(10); stems.insert(9); stems.insert(11); s.insert(std::pair, std::set >(suffixes, stems)); suffixes.clear(); stems.clear(); suffixes.insert(10); suffixes.insert(28); stems.insert(40); s.insert(std::pair, std::set >(suffixes, stems)); suffixes.clear(); stems.clear(); suffixes.insert(11); suffixes.insert(12); stems.insert(8); stems.insert(10); stems.insert(12); s.insert(std::pair, std::set >(suffixes, stems)); suffixes.clear(); stems.clear(); suffixes.insert(11); suffixes.insert(27); stems.insert(37); stems.insert(38); stems.insert(39); s.insert(std::pair, std::set >(suffixes, stems)); suffixes.clear(); stems.clear(); suffixes.insert(13); stems.insert(13); s.insert(std::pair, std::set >(suffixes, stems)); suffixes.clear(); stems.clear(); suffixes.insert(17); stems.insert(17); s.insert(std::pair, std::set >(suffixes, stems)); suffixes.clear(); stems.clear(); suffixes.insert(18); stems.insert(18); stems.insert(19); stems.insert(20); s.insert(std::pair, std::set >(suffixes, stems)); suffixes.clear(); stems.clear(); suffixes.insert(19); stems.insert(21); stems.insert(23); s.insert(std::pair, std::set >(suffixes, stems)); suffixes.clear(); stems.clear(); suffixes.insert(20); stems.insert(22); s.insert(std::pair, std::set >(suffixes, stems)); suffixes.clear(); stems.clear(); suffixes.insert(21); stems.insert(26); stems.insert(29); stems.insert(31); s.insert(std::pair, std::set >(suffixes, stems)); suffixes.clear(); stems.clear(); suffixes.insert(22); stems.insert(28); s.insert(std::pair, std::set >(suffixes, stems)); suffixes.clear(); stems.clear(); suffixes.insert(23); stems.insert(30); s.insert(std::pair, std::set >(suffixes, stems)); suffixes.clear(); stems.clear(); suffixes.insert(24); stems.insert(32); stems.insert(34); stems.insert(35); s.insert(std::pair, std::set >(suffixes, stems)); suffixes.clear(); stems.clear(); suffixes.insert(25); stems.insert(33); s.insert(std::pair, std::set >(suffixes, stems)); suffixes.clear(); stems.clear(); suffixes.insert(26); stems.insert(36); s.insert(std::pair, std::set >(suffixes, stems)); suffixes.clear(); stems.clear(); return s; } TEST(TestGiveNewSuffixSubsetsToStems) { std::istream* inputfile = setupinputfile(); WordlistParserAll wp; wp.processFile(inputfile); SetOptimizer so(wp.getSuffixSetStemSet()); std::map, std::set > got = so.giveSubsetsToStems(); std::map< std::set, std::set > want = setupsuffixstemmap2(); CHECK_EQUAL(got.size(), want.size()); CHECK(equal(got.begin(), got.end(), want.begin())); }