/*******************************************************************************
* Copyright (c) 2010 Google, Inc and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Sergey Prigogin (Google) - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.core.parser.tests.scanner;
import junit.framework.TestSuite;
import org.eclipse.cdt.core.testplugin.util.BaseTestCase;
import org.eclipse.cdt.internal.core.parser.scanner.StreamHasher;
/**
* Unit test for StreamHasher class.
*/
public class StreamHasherTests extends BaseTestCase {
private static final String TEXT =
"'Twas brillig, and the slithy toves\r\n" +
"Did gyre and gimble in the wabe;\r\n" +
"All mimsy were the borogoves,\r\n" +
"And the mome raths outgrabe.\r\n" +
"\r\n" +
"\"Beware the Jabberwock, my son!\r\n" +
"The jaws that bite, the claws that catch!\r\n" +
"Beware the Jubjub bird, and shun\r\n" +
"The frumious Bandersnatch!\"\r\n" +
"\r\n" +
"He took his vorpal sword in hand:\r\n" +
"Long time the manxome foe he sought—\r\n" +
"So rested he by the Tumtum tree,\r\n" +
"And stood awhile in thought.\r\n" +
"\r\n" +
"And as in uffish thought he stood,\r\n" +
"The Jabberwock, with eyes of flame,\r\n" +
"Came whiffling through the tulgey wood,\r\n" +
"And burbled as it came!\r\n" +
"\r\n" +
"One, two! One, two! and through and through\r\n" +
"The vorpal blade went snicker-snack!\r\n" +
"He left it dead, and with its head\r\n" +
"He went galumphing back.\r\n" +
"\r\n" +
"\"And hast thou slain the Jabberwock?\r\n" +
"Come to my arms, my beamish boy!\r\n" +
"O frabjous day! Callooh! Callay!\"\r\n" +
"He chortled in his joy.\r\n" +
"\r\n" +
"'Twas brillig, and the slithy toves\r\n" +
"Did gyre and gimble in the wabe;\r\n" +
"All mimsy were the borogoves,\r\n" +
"And the mome raths outgrabe.\r\n";
public static TestSuite suite() {
return suite(StreamHasherTests.class);
}
public StreamHasherTests() {
super();
}
public StreamHasherTests(String name) {
super(name);
}
public void testEmpty() throws Exception {
// Verify that an empty string has a zero hash value.
assertEquals(0, StreamHasher.hash(""));
assertEquals(0, new StreamHasher().computeHash());
}
public void testChunks() throws Exception {
// Verify that the hash value does not depend on partitioning of the character string into chunks.
long h = StreamHasher.hash(TEXT);
assertTrue(h != 0);
for (int chunkSize = 1; chunkSize <= 20; chunkSize++) {
StreamHasher hasher = new StreamHasher();
for (int offset = 0; offset < TEXT.length(); offset += chunkSize) {
char[] chunk = TEXT.substring(offset, Math.min(offset + chunkSize, TEXT.length())).toCharArray();
hasher.addChunk(chunk);
}
assertEquals(h, hasher.computeHash());
}
}
}