1   /*
2    * ====================================================================
3    * 
4    * The Apache Software License, Version 1.1
5    *
6    * Copyright (c) 2003 Nick Lothian. All rights reserved.
7    *
8    * Redistribution and use in source and binary forms, with or without
9    * modification, are permitted provided that the following conditions
10   * are met:
11   *
12   * 1. Redistributions of source code must retain the above copyright
13   *    notice, this list of conditions and the following disclaimer. 
14   *
15   * 2. Redistributions in binary form must reproduce the above copyright
16   *    notice, this list of conditions and the following disclaimer in
17   *    the documentation and/or other materials provided with the
18   *    distribution.
19   *
20   * 3. The end-user documentation included with the redistribution, if
21   *    any, must include the following acknowlegement:  
22   *       "This product includes software developed by the 
23   *        developers of Classifier4J (http://classifier4j.sf.net/)."
24   *    Alternately, this acknowlegement may appear in the software itself,
25   *    if and wherever such third-party acknowlegements normally appear.
26   *
27   * 4. The name "Classifier4J" must not be used to endorse or promote 
28   *    products derived from this software without prior written 
29   *    permission. For written permission, please contact   
30   *    http://sourceforge.net/users/nicklothian/.
31   *
32   * 5. Products derived from this software may not be called 
33   *    "Classifier4J", nor may "Classifier4J" appear in their names 
34   *    without prior written permission. For written permission, please 
35   *    contact http://sourceforge.net/users/nicklothian/.
36   *
37   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
38   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
39   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
40   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
41   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
42   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
43   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
44   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
45   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
46   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
47   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
48   * SUCH DAMAGE.
49   * ====================================================================
50   */
51  package net.sf.classifier4J.bayesian;
52  
53  import java.io.File;
54  
55  public class JDBMWordsDataSourceTest extends AbstractWordsDataSourceSupport {
56  	
57  	/***
58  	 * @param arg0
59  	 */
60  	public JDBMWordsDataSourceTest(String arg0) {
61  		super(arg0);		
62  	}
63  
64  	//JDBMWordsDataSource wordsDataSource = null;
65  
66  	/*
67  	 * @see TestCase#setUp()
68  	 */
69  	protected void setUp() throws Exception {
70  		wordsDataSource = new JDBMWordsDataSource();
71  		((JDBMWordsDataSource)wordsDataSource).open();
72  		super.setUp();
73  	}
74  
75  	/*
76  	 * @see TestCase#tearDown()
77  	 */
78  	protected void tearDown() throws Exception {
79  		((JDBMWordsDataSource)wordsDataSource).close();
80  		wordsDataSource = null;
81  		
82  		File dbFile = new File(JDBMWordsDataSource.databaseName + ".db");		
83  		if (dbFile.exists()) {			
84  			dbFile.delete();
85  			//System.out.println( "deleting " + dbFile.getAbsolutePath() );
86  		}
87  		dbFile = null;
88  
89  		File indexFile = new File(JDBMWordsDataSource.databaseName + ".lg");
90  		if (indexFile.exists()) {			
91  			indexFile.delete();
92  			//System.out.println( "deleting " + indexFile.getAbsolutePath() );
93  		}	
94  		indexFile.delete();		
95  		
96  		super.tearDown();
97  	}
98  	
99  	/*
100 	public void testMultipleWrites2() {
101 		long startTime = System.currentTimeMillis();	
102 		
103 		String word = "myWord";
104 		int count = 500000;
105 		for (int i=0; i < count; i++) {
106 			wordsDataSource.addNonMatch(word + count);
107 		}				
108 		long endTime = System.currentTimeMillis();
109 		
110 		System.out.println(count + " writes took " + (endTime-startTime)/1000 + " seconds");
111 	}
112 	*/
113 	
114 	public void testMultipleCategories() throws Exception {
115 		String word = "myWord";
116 		String category = "category1";
117 		((ICategorisedWordsDataSource)wordsDataSource).addNonMatch(category, word);
118 		((ICategorisedWordsDataSource)wordsDataSource).addMatch(category, word);
119 		((ICategorisedWordsDataSource)wordsDataSource).addMatch(category, word);		
120 		assertNull(wordsDataSource.getWordProbability(word)); // should be null in the default category
121 		
122 		WordProbability wp = ((ICategorisedWordsDataSource)wordsDataSource).getWordProbability(category, word);
123 		assertNotNull(wp); // should not be null for the correct category
124 		assertEquals(1, wp.getNonMatchingCount());
125 		assertEquals(2, wp.getMatchingCount());
126 	}
127 
128 }