18 |
19 | #include "murmur.h"
20 |
21 |
22 |
23 | /*******************************************************************************
24 | * Helper functions
25 | ******************************************************************************/
26 |
27 | int run_test(uint8_t *input, int length, uint32_t seed, uint32_t expected) {
28 | uint32_t result = murmur3(input, length, seed);
29 | printf("Expected: 0x%08x | Got: 0x%08x\n", expected, result);
30 | return result == expected;
31 | }
32 |
33 |
34 |
35 | /*******************************************************************************
36 | * Main function
37 | ******************************************************************************/
38 |
39 | /**
40 | * Really hope the tests are correct, because I snatched them verbatim
41 | * without checking them anywhere else, and they match my impelmentation!
42 | *
43 | * See the link at the top of the file for the goals for several of the
44 | * specific tests.
45 | */
46 | int main(int argc, char *argv[]) {
47 | int success = 1;
48 |
49 | puts("Testing murmur3...\n");
50 |
51 | success = success && run_test(NULL, 0, 0, 0);
52 | success = success && run_test(NULL, 0, 1, 0x514e28b7);
53 | success = success && run_test(NULL, 0, 0xffffffff, 0x81f16f39);
54 |
55 | uint8_t input[] = { 0xff, 0xff, 0xff, 0xff };
56 | success = success && run_test((uint8_t *)&input, 4, 0, 0x76293b50);
57 |
58 | uint8_t input2[] = { 0x21, 0x43, 0x65, 0x87 };
59 | success = success && run_test((uint8_t *)&input2, 4, 0, 0xf55b516b);
60 | success = success && run_test((uint8_t *)&input2, 4, 0x5082edee, 0x2362f9de);
61 | success = success && run_test((uint8_t *)&input2, 3, 0, 0x7e4a8634);
62 | success = success && run_test((uint8_t *)&input2, 2, 0, 0xa0f7b07a);
63 | success = success && run_test((uint8_t *)&input2, 1, 0, 0x72661cf4);
64 |
65 | uint8_t input3[] = { 0x00, 0x00, 0x00, 0x00 };
66 | success = success && run_test((uint8_t *)&input3, 4, 0, 0x2362f9de);
67 | success = success && run_test((uint8_t *)&input3, 3, 0, 0x85f0b427);
68 | success = success && run_test((uint8_t *)&input3, 2, 0, 0x30f4c306);
69 | success = success && run_test((uint8_t *)&input3, 1, 0, 0x514e28b7);
70 |
71 | char input4[] = "";
72 | success = success && run_test((uint8_t *)&input4, 0, 0, 0);
73 | success = success && run_test((uint8_t *)&input4, 0, 1, 0x514e28b7);
74 | success = success && run_test((uint8_t *)&input4, 0, 0xffffffff, 0x81f16f39);
75 |
76 | char input5[] = "\0\0\0\0";
77 | success = success && run_test((uint8_t *)&input5, 4, 0, 0x2362f9de);
78 |
79 | char input6[] = "aaaa";
80 | success = success && run_test((uint8_t *)&input6, 4, 0x9747b28c, 0x5a97808a);
81 | success = success && run_test((uint8_t *)&input6, 3, 0x9747b28c, 0x283e0130);
82 | success = success && run_test((uint8_t *)&input6, 2, 0x9747b28c, 0x5d211726);
83 | success = success && run_test((uint8_t *)&input6, 1, 0x9747b28c, 0x7fa09ea6);
84 |
85 | char input7[] = "abcd";
86 | success = success && run_test((uint8_t *)&input7, 4, 0x9747b28c, 0xf0478627);
87 | success = success && run_test((uint8_t *)&input7, 3, 0x9747b28c, 0xc84a62dd);
88 | success = success && run_test((uint8_t *)&input7, 2, 0x9747b28c, 0x74875592);
89 | success = success && run_test((uint8_t *)&input7, 1, 0x9747b28c, 0x7fa09ea6);
90 |
91 | char input8[] = "Hello, world!";
92 | success = success && run_test((uint8_t *)&input8, 13, 0x9747b28c, 0x24884cba);
93 |
94 | char input9[] = "ππππππππ";
95 | success = success && run_test((uint8_t *)&input9, 16, 0x9747b28c, 0xd58063c1);
96 |
97 | uint8_t input10[256];
98 | memset((void *)&input10, 'a', 256);
99 | success = success && run_test((uint8_t *)&input10, 256, 0x9747b28c,
100 | 0x37405bdc);
101 |
102 | uint8_t input11[] = "abc";
103 | success = success && run_test((uint8_t *)&input11, 3, 0, 0xb3dd93fa);
104 |
105 | uint8_t input12[] = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
106 | success = success && run_test((uint8_t *)&input12, 56, 0, 0xee925b90);
107 |
108 | uint8_t input13[] = "The quick brown fox jumps over the lazy dog";
109 | success = success && run_test((uint8_t *)&input13, 43, 0x9747b28c, 0x2fa826cd);
110 |
111 | puts("");
112 | puts(success ? "Succeeded!" : "Failed!");
113 | puts("");
114 |
115 | return !success;
116 |
117 | // TODO: Remove
118 | (void)argc;
119 | (void)argv;
120 | }
121 |
--------------------------------------------------------------------------------
/test/test-template.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Emscripten-Generated Code
5 |
9 |
10 |
11 | Check out the developer console to see the test results
12 | {{{ SCRIPT }}}
13 |
14 |
15 |
--------------------------------------------------------------------------------