diff options
author | Marvin Borner | 2023-05-26 22:20:00 +0200 |
---|---|---|
committer | Marvin Borner | 2023-05-26 22:20:00 +0200 |
commit | e5c2e8978f3572b00585b53c1f3bf8ee75586439 (patch) | |
tree | d56d131f8a06bf97f4b39e32eb756587673e67ec | |
parent | d239d5da765ddc389195d7121d517e16c674f50e (diff) |
Switched to xxHash from murmur3
-rw-r--r-- | inc/hash.h | 2 | ||||
-rw-r--r-- | readme.md | 7 | ||||
-rw-r--r-- | src/hash.c | 157 | ||||
-rw-r--r-- | test/aoc.blc.dump | 186 | ||||
-rw-r--r-- | test/fac.blc.dump | 70 | ||||
-rwxr-xr-x | test/run | 2 |
6 files changed, 252 insertions, 172 deletions
@@ -9,6 +9,6 @@ typedef uint64_t hash_t; -hash_t hash(const void *key, int len, uint64_t seed); +hash_t hash(const void *data, size_t len, uint64_t seed); #endif @@ -102,3 +102,10 @@ As of right now, expressions **don’t** get beta-reduced or manipulated in any other way. As an idea for the future, long expressions could get reduced using different techniques/depths and then get replaced with the shortest one (as fully reduced expressions aren’t necessarily shorter). + +## Libraries + +- [pqueue](https://github.com/vy/libpqueue/) \[BSD 2-Clause\]: Simple + priority queue implementation +- [xxHash](https://github.com/Cyan4973/xxHash/) \[BSD 2-Clause\]: + Extremely fast hash algorithm @@ -1,62 +1,135 @@ -// murmur3 originally by Austin Appleby -// Copyright (c) 2013, ksss -// Copyright (c) 2023, Marvin Borner <dev@marvinborner.de> -// SPDX-License-Identifier: MIT +//----------------------------------------------------------------------------- +// xxHash Library +// Copyright (c) 2012-2021 Yann Collet +// All rights reserved. +// +// BSD 2-Clause License (https://www.opensource.org/licenses/bsd-license.php) +// +// xxHash3 +//----------------------------------------------------------------------------- #include <stdint.h> +#include <string.h> #include <hash.h> -hash_t hash(const void *key, int len, uint64_t seed) +#define XXH_PRIME_1 11400714785074694791ULL +#define XXH_PRIME_2 14029467366897019727ULL +#define XXH_PRIME_3 1609587929392839161ULL +#define XXH_PRIME_4 9650029242287828579ULL +#define XXH_PRIME_5 2870177450012600261ULL + +static uint64_t XXH_read64(const void *memptr) { - const uint64_t m = 0xc6a4a7935bd1e995ULL; - const int r = 47; + uint64_t val; + memcpy(&val, memptr, sizeof(val)); + return val; +} - uint64_t h = seed ^ (len * m); +static uint32_t XXH_read32(const void *memptr) +{ + uint32_t val; + memcpy(&val, memptr, sizeof(val)); + return val; +} - const uint64_t *data = (const uint64_t *)key; - const uint64_t *end = data + (len / 8); +static uint64_t XXH_rotl64(uint64_t x, int r) +{ + return (x << r) | (x >> (64 - r)); +} - while (data != end) { - uint64_t k = *data++; +hash_t hash(const void *data, size_t len, uint64_t seed) +{ + const uint8_t *p = (const uint8_t *)data; + const uint8_t *const end = p + len; + uint64_t h64; - k *= m; - k ^= k >> r; - k *= m; + if (len >= 32) { + const uint8_t *const limit = end - 32; + uint64_t v1 = seed + XXH_PRIME_1 + XXH_PRIME_2; + uint64_t v2 = seed + XXH_PRIME_2; + uint64_t v3 = seed + 0; + uint64_t v4 = seed - XXH_PRIME_1; - h ^= k; - h *= m; - } + do { + v1 += XXH_read64(p) * XXH_PRIME_2; + v1 = XXH_rotl64(v1, 31); + v1 *= XXH_PRIME_1; - const unsigned char *data2 = (const unsigned char *)data; + v2 += XXH_read64(p + 8) * XXH_PRIME_2; + v2 = XXH_rotl64(v2, 31); + v2 *= XXH_PRIME_1; - int b = len & 7; - if (b >= 7) { - h ^= ((uint64_t)data2[6]) << 48; - } - if (b >= 6) { - h ^= ((uint64_t)data2[5]) << 40; - } - if (b >= 5) { - h ^= ((uint64_t)data2[4]) << 32; - } - if (b >= 4) { - h ^= ((uint64_t)data2[3]) << 24; + v3 += XXH_read64(p + 16) * XXH_PRIME_2; + v3 = XXH_rotl64(v3, 31); + v3 *= XXH_PRIME_1; + + v4 += XXH_read64(p + 24) * XXH_PRIME_2; + v4 = XXH_rotl64(v4, 31); + v4 *= XXH_PRIME_1; + + p += 32; + } while (p <= limit); + + h64 = XXH_rotl64(v1, 1) + XXH_rotl64(v2, 7) + + XXH_rotl64(v3, 12) + XXH_rotl64(v4, 18); + + v1 *= XXH_PRIME_2; + v1 = XXH_rotl64(v1, 31); + v1 *= XXH_PRIME_1; + h64 ^= v1; + h64 = h64 * XXH_PRIME_1 + XXH_PRIME_4; + + v2 *= XXH_PRIME_2; + v2 = XXH_rotl64(v2, 31); + v2 *= XXH_PRIME_1; + h64 ^= v2; + h64 = h64 * XXH_PRIME_1 + XXH_PRIME_4; + + v3 *= XXH_PRIME_2; + v3 = XXH_rotl64(v3, 31); + v3 *= XXH_PRIME_1; + h64 ^= v3; + h64 = h64 * XXH_PRIME_1 + XXH_PRIME_4; + + v4 *= XXH_PRIME_2; + v4 = XXH_rotl64(v4, 31); + v4 *= XXH_PRIME_1; + h64 ^= v4; + h64 = h64 * XXH_PRIME_1 + XXH_PRIME_4; + } else { + h64 = seed + XXH_PRIME_5; } - if (b >= 3) { - h ^= ((uint64_t)data2[2]) << 16; + + h64 += (uint64_t)len; + + while (p + 8 <= end) { + uint64_t k1 = XXH_read64(p); + k1 *= XXH_PRIME_2; + k1 = XXH_rotl64(k1, 31); + k1 *= XXH_PRIME_1; + h64 ^= k1; + h64 = XXH_rotl64(h64, 27) * XXH_PRIME_1 + XXH_PRIME_4; + p += 8; } - if (b >= 2) { - h ^= ((uint64_t)data2[1]) << 8; + + if (p + 4 <= end) { + h64 ^= (uint64_t)(XXH_read32(p)) * XXH_PRIME_1; + h64 = XXH_rotl64(h64, 23) * XXH_PRIME_2 + XXH_PRIME_3; + p += 4; } - if (b >= 1) { - h ^= ((uint64_t)data2[0]); - h *= m; + + while (p < end) { + h64 ^= (*p) * XXH_PRIME_5; + h64 = XXH_rotl64(h64, 11) * XXH_PRIME_1; + p++; } - h ^= h >> r; - h *= m; - h ^= h >> r; + h64 ^= h64 >> 33; + h64 *= XXH_PRIME_2; + h64 ^= h64 >> 29; + h64 *= XXH_PRIME_3; + h64 ^= h64 >> 32; - return h; + return h64; } diff --git a/test/aoc.blc.dump b/test/aoc.blc.dump index f5ecf68..455f743 100644 --- a/test/aoc.blc.dump +++ b/test/aoc.blc.dump @@ -1,100 +1,100 @@ === START BLOC === | entries: 95 -| entry 93: (<1> [[[(<3> (((<78> 1) [[0]]) (<8> ((2 (<33> 1)) <2>))))]]]) -| entry 92: (<9> 0) -| entry 91: [[(((<45> [(<85> [[0]])]) <62>) ((<34> 1) 0))]] -| entry 90: (((3 2) 1) 0) -| entry 89: [[[[[(((4 1) 0) <90>)]]]]] -| entry 88: [([(0 [[0]])] (((0 (<17> [[[(1 2)]]])) [(0 [[(<28> (<11> 0))]])]) [(0 [[(<30> <23>)]])]))] -| entry 87: (((<1> [[[(<3> ((<13> <6>) 0))]]]) <86>) 0) -| entry 86: ((<45> <56>) 1) -| entry 85: ((0 [[0]]) [[1]]) -| entry 84: ((0 [[1]]) [[[0]]]) -| entry 83: ([[[[[(((<49> 1) 2) 0)]]]]] 0) -| entry 82: (<9> <44>) -| entry 81: (<0> <39>) -| entry 80: (<1> [[[[(<32> (((3 2) ((2 1) <10>)) <2>))]]]]) -| entry 79: [[((([[[((<1> [[((<40> 3) ((4 <10>) (1 <2>)))]]) 0)]]] <89>) [[[2]]]) ((([[[((<7> 0) (((<22> (([[[[((3 0) (2 1))]]]] <93>) (<1> [[(<59> (1 0))]]))) ([(((((<45> [(((0 [[1]]) [[0]]) [[0]])]) <62>) 0) <83>) 0)] ((<34> 2) (<42> 0)))) 1))]]] (<42> (<51> ([(<24> (((0 (<17> [[1]])) [(0 [[(<28> [[0]])]])]) [(0 [[((<0> (<43> <36>)) 0)]])]))] 1)))) [[0]]) (<51> 0)))]] -| entry 78: [((<84> [[[0]]]) [0])] -| entry 77: ([((3 3) 0)] 0) -| entry 76: ([(0 0)] [[((<43> [(<18> <77>)]) [(<11> <77>)])]]) -| entry 75: (<76> 1) -| entry 74: ((3 0) [[[1]]]) -| entry 73: [[(([(((0 [(<29> (<76> 0))]) [[(((0 [[0]]) [(2 0)]) [[[0]]])]]) [[(((0 (1 0)) [[[0]]]) [(2 0)])]])] 1) <31>)]] -| entry 72: ((3 0) [[1]]) -| entry 71: [([(0 [[0]])] ((((0 (<64> <53>)) [(0 [[(<46> <35>)]])]) [(0 [[(<81> (<12> 0))]])]) [(0 [[(<47> <39>)]])]))] -| entry 70: ((3 0) [[[2]]]) -| entry 69: ([(<59> [[0]])] <10>) -| entry 68: (<12> <74>) -| entry 67: (<12> <44>) -| entry 66: (<5> <44>) -| entry 65: (<0> (((<1> [[[(<3> ((<13> (<8> <6>)) [[0]]))]]]) <86>) 0)) -| entry 64: (<0> <4>) -| entry 63: (<89> 1) -| entry 62: [(([[((0 1) [0])]] [[[0]]]) ((((0 [[1]]) [(<58> [[[2]]])]) [(<58> [[[1]]])]) [0]))] -| entry 61: (2 (<71> 1)) -| entry 60: (<5> <70>) +| entry 93: (<21> 1) +| entry 92: ((3 0) [[[2]]]) +| entry 91: (<0> (((<2> [[[(<1> ((<22> (<10> <7>)) [[0]]))]]]) <87>) 0)) +| entry 90: ((<2> [[[(<53> (<28> <6>))]]]) <5>) +| entry 89: (0 <5>) +| entry 88: (<0> <45>) +| entry 87: ((<8> <57>) 1) +| entry 86: [[[[(1 3)]]]] +| entry 85: (<21> <16>) +| entry 84: (<0> <37>) +| entry 83: [((<44> [[[0]]]) [0])] +| entry 82: [(<44> [0])] +| entry 81: ([[((([<44>] 1) ([[[(0 2)]]] 0)) 1)]] 0) +| entry 80: (<77> 1) +| entry 79: ((3 0) [[[1]]]) +| entry 78: [(<49> <69>)] +| entry 77: ([(0 0)] [[((<35> [(<18> <52>)]) [(<36> <52>)])]]) +| entry 76: [([(0 [[0]])] (((0 (<23> [[[(1 2)]]])) [(0 [[(<19> (<36> 0))]])]) [(0 [[(<88> <63>)]])]))] +| entry 75: (<17> <92>) +| entry 74: [(((0 [[0]]) [((<0> [[1]]) 0)]) [((<0> [[0]]) 0)])] +| entry 73: [(([[((0 1) [0])]] [[[0]]]) ((((0 [[1]]) [(<81> [[[2]]])]) [(<81> [[[1]]])]) [0]))] +| entry 72: (<2> [[[(<1> (((<83> 1) [[0]]) (<10> ((2 (<39> 1)) <6>))))]]]) +| entry 71: (<0> <93>) +| entry 70: [(0 [[1]])] +| entry 69: ((3 0) [[0]]) +| entry 68: ((3 0) [[1]]) +| entry 67: (4 3) +| entry 66: [[((([[[((<2> [[((<41> 3) ((4 <4>) (1 <6>)))]]) 0)]]] <38>) [[[2]]]) ((([[[((<42> 0) (((<3> (([[[[((3 0) (2 1))]]]] <72>) (<2> [[(<59> (1 0))]]))) ([(((((<8> [(((0 [[1]]) [[0]]) [[0]])]) <73>) 0) <50>) 0)] ((<26> 2) (<90> 0)))) 1))]]] (<90> (<74> ([(<70> (((0 (<23> [[1]])) [(0 [[(<19> [[0]])]])]) [(0 [[((<0> (<35> <45>)) 0)]])]))] 1)))) [[0]]) (<74> 0)))]] +| entry 65: (<9> <16>) +| entry 64: [([(0 [[0]])] ((((0 (<60> <86>)) [(0 [[(<71> <37>)]])]) [(0 [[(<27> (<21> 0))]])]) [(0 [[(<84> <62>)]])]))] +| entry 63: (<18> 1) +| entry 62: (<17> 1) +| entry 61: ((<3> (<2> [[[(<1> (((<22> <10>) [0]) <7>))]]])) <6>) +| entry 60: (<0> <5>) | entry 59: (<0> 0) -| entry 58: ([[((([<84>] 1) ([[[(0 2)]]] 0)) 1)]] 0) -| entry 57: (0 <4>) -| entry 56: [<85>] -| entry 55: ((<80> <21>) <4>) -| entry 54: ((3 0) [[0]]) -| entry 53: [[[[(1 3)]]]] -| entry 52: (0 (1 3)) -| entry 51: [(((0 [[0]]) [((<0> [[1]]) 0)]) [((<0> [[0]]) 0)])] -| entry 50: ((<22> (<1> [[[(<3> (((<13> <8>) [0]) <6>))]]])) <2>) -| entry 49: (4 3) -| entry 48: (<12> 1) -| entry 47: (<0> <35>) -| entry 46: (<0> <48>) -| entry 45: [[[(2 (1 0))]]] -| entry 44: ((3 0) [[[0]]]) -| entry 43: (0 [[[2]]]) -| entry 42: ((<1> [[[(<32> (<61> <2>))]]]) <4>) -| entry 41: (([([(1 (0 0))] [(1 (0 0))])] [[(((<57> [(<12> (2 0))]) [(<5> (2 0))]) [(<9> (2 0))])]]) 1) -| entry 40: (<16> 0) -| entry 39: (<5> 1) -| entry 38: (((<49> 2) 1) 0) -| entry 37: [(<63> <54>)] -| entry 36: (<11> 1) -| entry 35: (<9> 1) -| entry 34: [[((<21> 1) <83>)]] -| entry 33: [([(0 [[0]])] ((((0 (<64> [[[[(2 3)]]]])) [(0 [[(<46> (<5> 0))]])]) [(0 [[(<81> <35>)]])]) [(0 [[(<47> <48>)]])]))] -| entry 32: (<40> 1) -| entry 31: ([((<43> <53>) [[[[(0 3)]]]])] 0) -| entry 30: (<0> <36>) -| entry 29: [(<84> [0])] -| entry 28: (<0> <23>) -| entry 27: [(((1 <60>) <82>) <67>)] -| entry 26: [((1 (<11> <72>)) (<18> <54>))] -| entry 25: [(1 [((1 1) 0)])] -| entry 24: [(0 [[1]])] -| entry 23: (<18> 1) -| entry 22: [[[((2 0) 1)]]] -| entry 21: [[(([([[((1 0) [[[0]]])]] ((((0 [[(((0 (<33> <41>)) (<71> <41>)) <41>)]]) [[[((((1 (<27> 1)) [(((1 (<9> <70>)) <67>) <60>)]) <19>) <27>)]]]) [[[((((1 (<15> 1)) <19>) [(((1 <66>) (<9> <74>)) <68>)]) <15>)]]]) [[[((((1 (<19> 1)) <27>) <15>) <19>)]]]))] 1) ([(((<57> [[[[[(2 4)]]]]]) [[[[[(1 4)]]]]]) [[[[[(0 4)]]]]])] 0))]] -| entry 20: (<1> [[[(<3> ((<0> <13>) <6>))]]]) -| entry 19: [(([[[[[[((((5 2) 1) 0) <38>)]]]]]] 1) <44>)] -| entry 18: [[[[(1 <90>)]]]] -| entry 17: (<0> [[[2]]]) -| entry 16: [((0 [[[[[0]]]]]) [[1]])] -| entry 15: [(((1 <82>) <68>) <66>)] -| entry 14: ((<45> <88>) [[[[(((3 2) 0) 1)]]]]) -| entry 13: (1 <10>) -| entry 12: [[[[[(2 <38>)]]]]] -| entry 11: [[[[(0 <90>)]]]] -| entry 10: (<24> 0) -| entry 9: [[[[[(0 <38>)]]]]] -| entry 8: (<0> <10>) -| entry 7: (<1> [[[(((<16> 1) 0) ((<0> (<24> 1)) ((2 ([(0 [[0]])] 1)) 0)))]]]) -| entry 6: ((2 1) <2>) -| entry 5: [[[[[(1 <38>)]]]]] -| entry 4: [[[[3]]]] -| entry 3: (<40> [[0]]) -| entry 2: ([(0 [[0]])] 0) -| entry 1: [(<25> <25>)] +| entry 58: ([(<59> [[0]])] <4>) +| entry 57: [<32>] +| entry 56: (((<2> [[[(<1> ((<22> <7>) 0))]]]) <87>) 0) +| entry 55: (<17> <16>) +| entry 54: [[(([(((0 [(<82> (<77> 0))]) [[(((0 [[0]]) [(2 0)]) [[[0]]])]]) [[(((0 (1 0)) [[[0]]]) [(2 0)])]])] 1) <31>)]] +| entry 53: (<41> 1) +| entry 52: ([((3 3) 0)] 0) +| entry 51: [(1 [((1 1) 0)])] +| entry 50: ([[[[[(((<67> 1) 2) 0)]]]]] 0) +| entry 49: (<38> 1) +| entry 48: ((<8> <76>) [[[[(((3 2) 0) 1)]]]]) +| entry 47: ((<46> <11>) <5>) +| entry 46: (<2> [[[[(<53> (((3 2) ((2 1) <4>)) <6>))]]]]) +| entry 45: (<36> 1) +| entry 44: ((0 [[1]]) [[[0]]]) +| entry 43: [(((1 <75>) <65>) <85>)] +| entry 42: (<2> [[[(((<40> 1) 0) ((<0> (<70> 1)) ((2 ([(0 [[0]])] 1)) 0)))]]]) +| entry 41: (<40> 0) +| entry 40: [((0 [[[[[0]]]]]) [[1]])] +| entry 39: [([(0 [[0]])] ((((0 (<60> [[[[(2 3)]]]])) [(0 [[(<71> (<17> 0))]])]) [(0 [[(<27> <37>)]])]) [(0 [[(<84> <93>)]])]))] +| entry 38: [[[[[(((4 1) 0) <29>)]]]]] +| entry 37: (<9> 1) +| entry 36: [[[[(0 <29>)]]]] +| entry 35: (0 [[[2]]]) +| entry 34: [(([[[[[[((((5 2) 1) 0) <14>)]]]]]] 1) <16>)] +| entry 33: (<21> <79>) +| entry 32: ((0 [[0]]) [[1]]) +| entry 31: ([((<35> <86>) [[[[(0 3)]]]])] 0) +| entry 30: [[(((<8> [(<32> [[0]])]) <73>) ((<26> 1) 0))]] +| entry 29: (((3 2) 1) 0) +| entry 28: (2 (<64> 1)) +| entry 27: (<0> <62>) +| entry 26: [[((<11> 1) <50>)]] +| entry 25: (0 (1 3)) +| entry 24: [(((1 <65>) <33>) <55>)] +| entry 23: (<0> [[[2]]]) +| entry 22: (1 <4>) +| entry 21: [[[[[(2 <14>)]]]]] +| entry 20: [((1 (<36> <68>)) (<18> <69>))] +| entry 19: (<0> <63>) +| entry 18: [[[[(1 <29>)]]]] +| entry 17: [[[[[(1 <14>)]]]]] +| entry 16: ((3 0) [[[0]]]) +| entry 15: (([([(1 (0 0))] [(1 (0 0))])] [[(((<89> [(<21> (2 0))]) [(<17> (2 0))]) [(<9> (2 0))])]]) 1) +| entry 14: (((<67> 2) 1) 0) +| entry 13: (<2> [[[(<1> ((<0> <22>) <7>))]]]) +| entry 12: (<9> 0) +| entry 11: [[(([([[((1 0) [[[0]]])]] ((((0 [[(((0 (<39> <15>)) (<64> <15>)) <15>)]]) [[[((((1 (<43> 1)) [(((1 (<9> <92>)) <85>) <75>)]) <34>) <43>)]]]) [[[((((1 (<24> 1)) <34>) [(((1 <55>) (<9> <79>)) <33>)]) <24>)]]]) [[[((((1 (<34> 1)) <43>) <24>) <34>)]]]))] 1) ([(((<89> [[[[[(2 4)]]]]]) [[[[[(1 4)]]]]]) [[[[[(0 4)]]]]])] 0))]] +| entry 10: (<0> <4>) +| entry 9: [[[[[(0 <14>)]]]]] +| entry 8: [[[(2 (1 0))]]] +| entry 7: ((2 1) <6>) +| entry 6: ([(0 [[0]])] 0) +| entry 5: [[[[3]]]] +| entry 4: (<70> 0) +| entry 3: [[[((2 0) 1)]]] +| entry 2: [(<51> <51>)] +| entry 1: (<41> [[0]]) | entry 0: [[[((0 2) 1)]]] -| final: [([(<8> (<55> ((<93> [[[[<52>]]]]) 0)))] ((<1> [[(<3> ((<7> ((<7> (1 (<50> ((<22> (<22> [[(<56> ((<91> 1) 0))]])) <10>)))) <69>)) (1 (<50> ((<22> (<22> <91>)) <10>)))))]]) ((<20> <55>) (((<1> [[[(<3> ([(<8> ((3 2) <2>))] (([[(<65> ([(<3> <2>)] <87>))]] 1) 0)))]]]) <78>) ((<20> ((<45> ((<80> [[((<21> (([[((((1 <4>) [((<34> <92>) 1)]) [((<21> <92>) 1)]) [<92>])]] [[[[(1 <52>)]]]]) 1)) 0)]]) <4>)) (<20> [(((<1> [[[(((<29> 0) 1) (<61> ([([(0 [[0]])] (((0 (<17> [[[2]]])) [(0 [[(<28> <36>)]])]) [(0 [[(<30> (<18> 0))]])]))] 0)))]]]) <4>) (([[((((<73> 0) 1) [[[2]]]) (<14> (([[(([([[((1 0) [[0]])]] (((0 [[((0 (<88> <75>)) <75>)]]) [[[(((1 (<26> 1)) [(<63> <72>)]) <26>)]]]) [[[(((1 (<37> 1)) <26>) <37>)]]]))] 1) <31>)]] ((<79> 1) 0)) (<14> ((<79> 0) 1)))))]] 0) [[[(0 (0 (0 (0 (1 (1 (0 (0 2))))))))]]]))]))) ((<1> [[([(((<16> <2>) <69>) (<8> (2 ([(0 [[0]])] <2>))))] (([[(<65> <87>)]] (<73> [[[(0 (1 (0 (1 (0 (0 (0 (0 2))))))))]]])) 0))]]) 0))))))] +| final: [([(<10> (<47> ((<72> [[[[<25>]]]]) 0)))] ((<2> [[(<1> ((<42> ((<42> (1 (<61> ((<3> (<3> [[(<57> ((<30> 1) 0))]])) <4>)))) <58>)) (1 (<61> ((<3> (<3> <30>)) <4>)))))]]) ((<13> <47>) (((<2> [[[(<1> ([(<10> ((3 2) <6>))] (([[(<91> ([(<1> <6>)] <56>))]] 1) 0)))]]]) <83>) ((<13> ((<8> ((<46> [[((<11> (([[((((1 <5>) [((<26> <12>) 1)]) [((<11> <12>) 1)]) [<12>])]] [[[[(1 <25>)]]]]) 1)) 0)]]) <5>)) (<13> [(((<2> [[[(((<82> 0) 1) (<28> ([([(0 [[0]])] (((0 (<23> [[[2]]])) [(0 [[(<19> <45>)]])]) [(0 [[(<88> (<18> 0))]])]))] 0)))]]]) <5>) (([[((((<54> 0) 1) [[[2]]]) (<48> (([[(([([[((1 0) [[0]])]] (((0 [[((0 (<76> <80>)) <80>)]]) [[[(((1 (<20> 1)) [(<49> <68>)]) <20>)]]]) [[[(((1 (<78> 1)) <20>) <78>)]]]))] 1) <31>)]] ((<66> 1) 0)) (<48> ((<66> 0) 1)))))]] 0) [[[(0 (0 (0 (0 (1 (1 (0 (0 2))))))))]]]))]))) ((<2> [[([(((<40> <6>) <58>) (<10> (2 ([(0 [[0]])] <6>))))] (([[(<91> <56>)]] (<54> [[[(0 (1 (0 (1 (0 (0 (0 (0 2))))))))]]])) 0))]]) 0))))))] === END BLOC === diff --git a/test/fac.blc.dump b/test/fac.blc.dump index e46df2a..7a1e387 100644 --- a/test/fac.blc.dump +++ b/test/fac.blc.dump @@ -1,40 +1,40 @@ === START BLOC === | entries: 35 -| entry 33: (<1> 1) -| entry 32: [(((1 <18>) <24>) <22>)] -| entry 31: (0 <5>) -| entry 30: (<2> <33>) -| entry 29: (<3> 1) -| entry 28: (<2> <5>) -| entry 27: ([([(1 (0 0))] [(1 (0 0))])] [[(((<31> [(<3> (2 0))]) [(<1> (2 0))]) [(<0> (2 0))])]]) -| entry 26: ((3 0) [[[2]]]) -| entry 25: [[(([([[((1 0) [[[0]]])]] ((((0 [[(((0 ([([(0 [[0]])] ((((0 (<28> [[[[(2 3)]]]])) [(0 [[(<19> (<1> 0))]])]) [(0 [[(<30> <12>)]])]) [(0 [[(<17> <29>)]])]))] <6>)) (<11> <6>)) <6>)]]) [[[((((1 (<32> 1)) [(((1 (<0> <26>)) <22>) <18>)]) <7>) <32>)]]]) [[[((((1 (<9> 1)) <7>) [(((1 <21>) (<0> <13>)) <23>)]) <9>)]]]) [[[((((1 (<7> 1)) <32>) <9>) <7>)]]]))] 1) <20>)]] -| entry 24: (<0> <15>) -| entry 23: (<3> <13>) -| entry 22: (<3> <15>) -| entry 21: (<1> <15>) -| entry 20: ([(((<31> [[[[[(2 4)]]]]]) [[[[[(1 4)]]]]]) [[[[[(0 4)]]]]])] 0) -| entry 19: (<2> <29>) -| entry 18: (<1> <26>) -| entry 17: (<2> <12>) -| entry 16: (<0> 0) -| entry 15: ((3 0) [[[0]]]) -| entry 14: (4 3) -| entry 13: ((3 0) [[[1]]]) -| entry 12: (<0> 1) -| entry 11: [([(0 [[0]])] ((((0 (<28> <8>)) [(0 [[(<19> <12>)]])]) [(0 [[(<30> (<3> 0))]])]) [(0 [[(<17> <33>)]])]))] -| entry 10: [(1 [((1 1) 0)])] -| entry 9: [(((1 <24>) <23>) <21>)] -| entry 8: [[[[(1 3)]]]] -| entry 7: [(([[[[[[((((5 2) 1) 0) <4>)]]]]]] 1) <15>)] -| entry 6: (<27> 1) -| entry 5: [[[[3]]]] -| entry 4: (((<14> 2) 1) 0) -| entry 3: [[[[[(2 <4>)]]]]] -| entry 2: [[[((0 2) 1)]]] -| entry 1: [[[[[(1 <4>)]]]]] -| entry 0: [[[[[(0 <4>)]]]]] -| final: ([((((([(<10> <10>)] [[[[[(((([[(([((((0 [([((((0 [[1]]) [[[0]]]) [[[0]]]) [0])] (<27> 0))]) [[((((0 [[0]]) [(2 0)]) [[[0]]]) [[[0]]])]]) [[((((0 [[0]]) [[[0]]]) [(2 0)]) [[[0]]])]]) [[((((0 (1 0)) [[[0]]]) [[[0]]]) [(2 0)])]])] 1) <20>)]] 2) (<11> 1)) 3) ((((4 (([[((((1 <5>) [(([[((<25> 1) ([[[[[(((<14> 1) 2) 0)]]]]] 0))]] <16>) 1)]) [((<25> <16>) 1)]) [<16>])]] 3) (0 2))) (<11> 2)) 1) 0))]]]]]) <8>) <8>) 0) [0])] [[[[(0 (1 (0 (1 3))))]]]]) +| entry 33: (<2> 1) +| entry 32: (0 <8>) +| entry 31: (<2> <13>) +| entry 30: (<1> <4>) +| entry 29: ((3 0) [[[1]]]) +| entry 28: [(([[[[[[((((5 2) 1) 0) <6>)]]]]]] 1) <13>)] +| entry 27: (<1> <21>) +| entry 26: (<1> <33>) +| entry 25: (<0> <13>) +| entry 24: (<1> <8>) +| entry 23: (<2> <29>) +| entry 22: ([([(1 (0 0))] [(1 (0 0))])] [[(((<32> [(<2> (2 0))]) [(<5> (2 0))]) [(<0> (2 0))])]]) +| entry 21: (<5> 1) +| entry 20: (<5> <13>) +| entry 19: ((3 0) [[[2]]]) +| entry 18: [[(([([[((1 0) [[[0]]])]] ((((0 [[(((0 ([([(0 [[0]])] ((((0 (<24> [[[[(2 3)]]]])) [(0 [[(<26> (<5> 0))]])]) [(0 [[(<27> <4>)]])]) [(0 [[(<30> <33>)]])]))] <14>)) (<11> <14>)) <14>)]]) [[[((((1 (<15> 1)) [(((1 (<0> <19>)) <31>) <17>)]) <28>) <15>)]]]) [[[((((1 (<9> 1)) <28>) [(((1 <20>) (<0> <29>)) <23>)]) <9>)]]]) [[[((((1 (<28> 1)) <15>) <9>) <28>)]]]))] 1) <16>)]] +| entry 17: (<5> <19>) +| entry 16: ([(((<32> [[[[[(2 4)]]]]]) [[[[[(1 4)]]]]]) [[[[[(0 4)]]]]])] 0) +| entry 15: [(((1 <17>) <25>) <31>)] +| entry 14: (<22> 1) +| entry 13: ((3 0) [[[0]]]) +| entry 12: [(1 [((1 1) 0)])] +| entry 11: [([(0 [[0]])] ((((0 (<24> <7>)) [(0 [[(<26> <4>)]])]) [(0 [[(<27> (<2> 0))]])]) [(0 [[(<30> <21>)]])]))] +| entry 10: (4 3) +| entry 9: [(((1 <25>) <23>) <20>)] +| entry 8: [[[[3]]]] +| entry 7: [[[[(1 3)]]]] +| entry 6: (((<10> 2) 1) 0) +| entry 5: [[[[[(1 <6>)]]]]] +| entry 4: (<0> 1) +| entry 3: (<0> 0) +| entry 2: [[[[[(2 <6>)]]]]] +| entry 1: [[[((0 2) 1)]]] +| entry 0: [[[[[(0 <6>)]]]]] +| final: ([((((([(<12> <12>)] [[[[[(((([[(([((((0 [([((((0 [[1]]) [[[0]]]) [[[0]]]) [0])] (<22> 0))]) [[((((0 [[0]]) [(2 0)]) [[[0]]]) [[[0]]])]]) [[((((0 [[0]]) [[[0]]]) [(2 0)]) [[[0]]])]]) [[((((0 (1 0)) [[[0]]]) [[[0]]]) [(2 0)])]])] 1) <16>)]] 2) (<11> 1)) 3) ((((4 (([[((((1 <8>) [(([[((<18> 1) ([[[[[(((<10> 1) 2) 0)]]]]] 0))]] <3>) 1)]) [((<18> <3>) 1)]) [<3>])]] 3) (0 2))) (<11> 2)) 1) 0))]]]]]) <7>) <7>) 0) [0])] [[[[(0 (1 (0 (1 3))))]]]]) === END BLOC === @@ -7,7 +7,7 @@ SUCC="\033[0;32m[SUCC]\033[0m " for file in *.blc; do ../build/bloc --from-blc -i "$file" -o ../build/"$file".bloc - ../build/bloc --from-bloc -d -i ../build/"$file".bloc -o ../build/"$file" >../build/"$file".dump + ../build/bloc --from-bloc -d -i ../build/"$file".bloc -o ../build/"$file" &>../build/"$file".dump cmp "$file" ../build/"$file" && printf "$SUCC" || printf "$FAIL" echo "blc cmp on $file" cmp "$file".dump ../build/"$file".dump && printf "$SUCC" || printf "$FAIL" |