Last active
August 29, 2015 14:15
-
-
Save jakob-e/85669d248f084318a69c to your computer and use it in GitHub Desktop.
Generated by SassMeister.com. http://sassmeister.com/gist/85669d248f084318a69c
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // ---- | |
| // Sass (v3.4.12) | |
| // Compass (v1.0.3) | |
| // MathSass (v0.9.5) | |
| // ---- | |
| // | |
| // SCSS Math Memoization - ENABLED | |
| // | |
| // In computing, memoization is an optimization technique used primarily to speed | |
| // up computer programs by storing the results of expensive function calls and | |
| // returning the cached result when the same inputs occur again. | |
| // @import "math"; | |
| $math-memoization:(); | |
| $math-memoization-enabled: true; | |
| @function math-memorization($cache-key, $result: null){ | |
| $cache-key: inspect($cache-key); | |
| @if $result == null and $math-memoization-enabled { | |
| $cache-status: 'cached' !global; | |
| @return map-deep-get($math-memoization,$cache-key); | |
| } @else { | |
| $cache-status: 'calculated' !global; | |
| $math-memoization: map-deep-set($math-memoization, $cache-key, $result) !global; | |
| @return $result; | |
| } | |
| } | |
| // Helper functions | |
| // Deep Get | |
| @function map-deep-get($map, $keys...) { | |
| @each $key in $keys { | |
| $map: map-get($map, $key); | |
| } | |
| @return $map; | |
| } | |
| // Deep Set | |
| @function map-deep-set($map, $keys.../*, $value */) { | |
| $map-list: ($map,); | |
| $result: null; | |
| @if length($keys) == 2 { | |
| @return map-merge($map, (nth($keys, 1): nth($keys, -1))); | |
| } | |
| @for $i from 1 through length($keys) - 2 { | |
| $map-list: append($map-list, map-get(nth($map-list, -1), nth($keys, $i))); | |
| } | |
| @for $i from length($map-list) through 1 { | |
| $result: map-merge(nth($map-list, $i), (nth($keys, $i): if($i == length($map-list), nth($keys, -1), $result))); | |
| } | |
| @return $result; | |
| } | |
| // Case modded mathsass pow function | |
| // https://github.com/terkel/mathsass | |
| // | |
| @import "math"; | |
| @function pow($base, $exp) { | |
| $iterations: 0 !global; | |
| $cache-key:(pow, $base, $exp); | |
| $cache: math-memorization($cache-key); | |
| @if $cache { @return $cache; } | |
| @if $exp == floor($exp) { | |
| $r: 1; | |
| $s: 0; | |
| @if $exp < 0 { | |
| $exp: $exp * -1; | |
| $s: 1; | |
| } | |
| @while $exp > 0 { | |
| @if $exp % 2 == 1 { | |
| $r: $r * $base; | |
| } | |
| $exp: floor($exp * 0.5); | |
| $base: $base * $base; | |
| } | |
| @return math-memorization($cache-key, if($s != 0, 1 / $r, $r)); | |
| } @else { | |
| $res: exp(log($base) * $exp); | |
| @return math-memorization($cache-key, $res); | |
| } | |
| } | |
| $phi: 1.618; | |
| $expect-to-be:( | |
| 0.09017941498689583, | |
| 0.11470878302806135, | |
| 0.14591029344879747, | |
| 0.18559881093940328, | |
| 0.23608285480015428, | |
| 0.30029887609995454, | |
| 0.3819820590666497, | |
| 0.48588358152972644, | |
| 0.6180469715698392, | |
| 0.7861596349150973, | |
| 1, | |
| 1.2720062892926278, | |
| 1.618, | |
| 2.058106176075472, | |
| 2.6179240000000004, | |
| 3.3300157928901135, | |
| 4.235801032000001, | |
| 5.387965552896204, | |
| 6.853526069776002, | |
| 8.717728264586059); | |
| Memoization-Enabled { | |
| @for $l from 0 to 10 { | |
| @for $i from -10 to 10 { | |
| pow#{$i}: pow($phi, $i/2) unquote('==') nth($expect-to-be, $i+11) ' #{$cache-status} '; | |
| } | |
| } | |
| } | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Memoization-Enabled { | |
| pow-10: 0.09018 == 0.09018 " calculated "; | |
| pow-9: 0.11471 == 0.11471 " calculated "; | |
| pow-8: 0.14591 == 0.14591 " calculated "; | |
| pow-7: 0.1856 == 0.1856 " calculated "; | |
| pow-6: 0.23608 == 0.23608 " calculated "; | |
| pow-5: 0.3003 == 0.3003 " calculated "; | |
| pow-4: 0.38198 == 0.38198 " calculated "; | |
| pow-3: 0.48588 == 0.48588 " calculated "; | |
| pow-2: 0.61805 == 0.61805 " calculated "; | |
| pow-1: 0.78616 == 0.78616 " calculated "; | |
| pow0: 1 == 1 " calculated "; | |
| pow1: 1.27201 == 1.27201 " calculated "; | |
| pow2: 1.618 == 1.618 " calculated "; | |
| pow3: 2.05811 == 2.05811 " calculated "; | |
| pow4: 2.61792 == 2.61792 " calculated "; | |
| pow5: 3.33002 == 3.33002 " calculated "; | |
| pow6: 4.2358 == 4.2358 " calculated "; | |
| pow7: 5.38797 == 5.38797 " calculated "; | |
| pow8: 6.85353 == 6.85353 " calculated "; | |
| pow9: 8.71773 == 8.71773 " calculated "; | |
| pow-10: 0.09018 == 0.09018 " cached "; | |
| pow-9: 0.11471 == 0.11471 " cached "; | |
| pow-8: 0.14591 == 0.14591 " cached "; | |
| pow-7: 0.1856 == 0.1856 " cached "; | |
| pow-6: 0.23608 == 0.23608 " cached "; | |
| pow-5: 0.3003 == 0.3003 " cached "; | |
| pow-4: 0.38198 == 0.38198 " cached "; | |
| pow-3: 0.48588 == 0.48588 " cached "; | |
| pow-2: 0.61805 == 0.61805 " cached "; | |
| pow-1: 0.78616 == 0.78616 " cached "; | |
| pow0: 1 == 1 " cached "; | |
| pow1: 1.27201 == 1.27201 " cached "; | |
| pow2: 1.618 == 1.618 " cached "; | |
| pow3: 2.05811 == 2.05811 " cached "; | |
| pow4: 2.61792 == 2.61792 " cached "; | |
| pow5: 3.33002 == 3.33002 " cached "; | |
| pow6: 4.2358 == 4.2358 " cached "; | |
| pow7: 5.38797 == 5.38797 " cached "; | |
| pow8: 6.85353 == 6.85353 " cached "; | |
| pow9: 8.71773 == 8.71773 " cached "; | |
| pow-10: 0.09018 == 0.09018 " cached "; | |
| pow-9: 0.11471 == 0.11471 " cached "; | |
| pow-8: 0.14591 == 0.14591 " cached "; | |
| pow-7: 0.1856 == 0.1856 " cached "; | |
| pow-6: 0.23608 == 0.23608 " cached "; | |
| pow-5: 0.3003 == 0.3003 " cached "; | |
| pow-4: 0.38198 == 0.38198 " cached "; | |
| pow-3: 0.48588 == 0.48588 " cached "; | |
| pow-2: 0.61805 == 0.61805 " cached "; | |
| pow-1: 0.78616 == 0.78616 " cached "; | |
| pow0: 1 == 1 " cached "; | |
| pow1: 1.27201 == 1.27201 " cached "; | |
| pow2: 1.618 == 1.618 " cached "; | |
| pow3: 2.05811 == 2.05811 " cached "; | |
| pow4: 2.61792 == 2.61792 " cached "; | |
| pow5: 3.33002 == 3.33002 " cached "; | |
| pow6: 4.2358 == 4.2358 " cached "; | |
| pow7: 5.38797 == 5.38797 " cached "; | |
| pow8: 6.85353 == 6.85353 " cached "; | |
| pow9: 8.71773 == 8.71773 " cached "; | |
| pow-10: 0.09018 == 0.09018 " cached "; | |
| pow-9: 0.11471 == 0.11471 " cached "; | |
| pow-8: 0.14591 == 0.14591 " cached "; | |
| pow-7: 0.1856 == 0.1856 " cached "; | |
| pow-6: 0.23608 == 0.23608 " cached "; | |
| pow-5: 0.3003 == 0.3003 " cached "; | |
| pow-4: 0.38198 == 0.38198 " cached "; | |
| pow-3: 0.48588 == 0.48588 " cached "; | |
| pow-2: 0.61805 == 0.61805 " cached "; | |
| pow-1: 0.78616 == 0.78616 " cached "; | |
| pow0: 1 == 1 " cached "; | |
| pow1: 1.27201 == 1.27201 " cached "; | |
| pow2: 1.618 == 1.618 " cached "; | |
| pow3: 2.05811 == 2.05811 " cached "; | |
| pow4: 2.61792 == 2.61792 " cached "; | |
| pow5: 3.33002 == 3.33002 " cached "; | |
| pow6: 4.2358 == 4.2358 " cached "; | |
| pow7: 5.38797 == 5.38797 " cached "; | |
| pow8: 6.85353 == 6.85353 " cached "; | |
| pow9: 8.71773 == 8.71773 " cached "; | |
| pow-10: 0.09018 == 0.09018 " cached "; | |
| pow-9: 0.11471 == 0.11471 " cached "; | |
| pow-8: 0.14591 == 0.14591 " cached "; | |
| pow-7: 0.1856 == 0.1856 " cached "; | |
| pow-6: 0.23608 == 0.23608 " cached "; | |
| pow-5: 0.3003 == 0.3003 " cached "; | |
| pow-4: 0.38198 == 0.38198 " cached "; | |
| pow-3: 0.48588 == 0.48588 " cached "; | |
| pow-2: 0.61805 == 0.61805 " cached "; | |
| pow-1: 0.78616 == 0.78616 " cached "; | |
| pow0: 1 == 1 " cached "; | |
| pow1: 1.27201 == 1.27201 " cached "; | |
| pow2: 1.618 == 1.618 " cached "; | |
| pow3: 2.05811 == 2.05811 " cached "; | |
| pow4: 2.61792 == 2.61792 " cached "; | |
| pow5: 3.33002 == 3.33002 " cached "; | |
| pow6: 4.2358 == 4.2358 " cached "; | |
| pow7: 5.38797 == 5.38797 " cached "; | |
| pow8: 6.85353 == 6.85353 " cached "; | |
| pow9: 8.71773 == 8.71773 " cached "; | |
| pow-10: 0.09018 == 0.09018 " cached "; | |
| pow-9: 0.11471 == 0.11471 " cached "; | |
| pow-8: 0.14591 == 0.14591 " cached "; | |
| pow-7: 0.1856 == 0.1856 " cached "; | |
| pow-6: 0.23608 == 0.23608 " cached "; | |
| pow-5: 0.3003 == 0.3003 " cached "; | |
| pow-4: 0.38198 == 0.38198 " cached "; | |
| pow-3: 0.48588 == 0.48588 " cached "; | |
| pow-2: 0.61805 == 0.61805 " cached "; | |
| pow-1: 0.78616 == 0.78616 " cached "; | |
| pow0: 1 == 1 " cached "; | |
| pow1: 1.27201 == 1.27201 " cached "; | |
| pow2: 1.618 == 1.618 " cached "; | |
| pow3: 2.05811 == 2.05811 " cached "; | |
| pow4: 2.61792 == 2.61792 " cached "; | |
| pow5: 3.33002 == 3.33002 " cached "; | |
| pow6: 4.2358 == 4.2358 " cached "; | |
| pow7: 5.38797 == 5.38797 " cached "; | |
| pow8: 6.85353 == 6.85353 " cached "; | |
| pow9: 8.71773 == 8.71773 " cached "; | |
| pow-10: 0.09018 == 0.09018 " cached "; | |
| pow-9: 0.11471 == 0.11471 " cached "; | |
| pow-8: 0.14591 == 0.14591 " cached "; | |
| pow-7: 0.1856 == 0.1856 " cached "; | |
| pow-6: 0.23608 == 0.23608 " cached "; | |
| pow-5: 0.3003 == 0.3003 " cached "; | |
| pow-4: 0.38198 == 0.38198 " cached "; | |
| pow-3: 0.48588 == 0.48588 " cached "; | |
| pow-2: 0.61805 == 0.61805 " cached "; | |
| pow-1: 0.78616 == 0.78616 " cached "; | |
| pow0: 1 == 1 " cached "; | |
| pow1: 1.27201 == 1.27201 " cached "; | |
| pow2: 1.618 == 1.618 " cached "; | |
| pow3: 2.05811 == 2.05811 " cached "; | |
| pow4: 2.61792 == 2.61792 " cached "; | |
| pow5: 3.33002 == 3.33002 " cached "; | |
| pow6: 4.2358 == 4.2358 " cached "; | |
| pow7: 5.38797 == 5.38797 " cached "; | |
| pow8: 6.85353 == 6.85353 " cached "; | |
| pow9: 8.71773 == 8.71773 " cached "; | |
| pow-10: 0.09018 == 0.09018 " cached "; | |
| pow-9: 0.11471 == 0.11471 " cached "; | |
| pow-8: 0.14591 == 0.14591 " cached "; | |
| pow-7: 0.1856 == 0.1856 " cached "; | |
| pow-6: 0.23608 == 0.23608 " cached "; | |
| pow-5: 0.3003 == 0.3003 " cached "; | |
| pow-4: 0.38198 == 0.38198 " cached "; | |
| pow-3: 0.48588 == 0.48588 " cached "; | |
| pow-2: 0.61805 == 0.61805 " cached "; | |
| pow-1: 0.78616 == 0.78616 " cached "; | |
| pow0: 1 == 1 " cached "; | |
| pow1: 1.27201 == 1.27201 " cached "; | |
| pow2: 1.618 == 1.618 " cached "; | |
| pow3: 2.05811 == 2.05811 " cached "; | |
| pow4: 2.61792 == 2.61792 " cached "; | |
| pow5: 3.33002 == 3.33002 " cached "; | |
| pow6: 4.2358 == 4.2358 " cached "; | |
| pow7: 5.38797 == 5.38797 " cached "; | |
| pow8: 6.85353 == 6.85353 " cached "; | |
| pow9: 8.71773 == 8.71773 " cached "; | |
| pow-10: 0.09018 == 0.09018 " cached "; | |
| pow-9: 0.11471 == 0.11471 " cached "; | |
| pow-8: 0.14591 == 0.14591 " cached "; | |
| pow-7: 0.1856 == 0.1856 " cached "; | |
| pow-6: 0.23608 == 0.23608 " cached "; | |
| pow-5: 0.3003 == 0.3003 " cached "; | |
| pow-4: 0.38198 == 0.38198 " cached "; | |
| pow-3: 0.48588 == 0.48588 " cached "; | |
| pow-2: 0.61805 == 0.61805 " cached "; | |
| pow-1: 0.78616 == 0.78616 " cached "; | |
| pow0: 1 == 1 " cached "; | |
| pow1: 1.27201 == 1.27201 " cached "; | |
| pow2: 1.618 == 1.618 " cached "; | |
| pow3: 2.05811 == 2.05811 " cached "; | |
| pow4: 2.61792 == 2.61792 " cached "; | |
| pow5: 3.33002 == 3.33002 " cached "; | |
| pow6: 4.2358 == 4.2358 " cached "; | |
| pow7: 5.38797 == 5.38797 " cached "; | |
| pow8: 6.85353 == 6.85353 " cached "; | |
| pow9: 8.71773 == 8.71773 " cached "; | |
| pow-10: 0.09018 == 0.09018 " cached "; | |
| pow-9: 0.11471 == 0.11471 " cached "; | |
| pow-8: 0.14591 == 0.14591 " cached "; | |
| pow-7: 0.1856 == 0.1856 " cached "; | |
| pow-6: 0.23608 == 0.23608 " cached "; | |
| pow-5: 0.3003 == 0.3003 " cached "; | |
| pow-4: 0.38198 == 0.38198 " cached "; | |
| pow-3: 0.48588 == 0.48588 " cached "; | |
| pow-2: 0.61805 == 0.61805 " cached "; | |
| pow-1: 0.78616 == 0.78616 " cached "; | |
| pow0: 1 == 1 " cached "; | |
| pow1: 1.27201 == 1.27201 " cached "; | |
| pow2: 1.618 == 1.618 " cached "; | |
| pow3: 2.05811 == 2.05811 " cached "; | |
| pow4: 2.61792 == 2.61792 " cached "; | |
| pow5: 3.33002 == 3.33002 " cached "; | |
| pow6: 4.2358 == 4.2358 " cached "; | |
| pow7: 5.38797 == 5.38797 " cached "; | |
| pow8: 6.85353 == 6.85353 " cached "; | |
| pow9: 8.71773 == 8.71773 " cached "; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment