Skip to content

Instantly share code, notes, and snippets.

@jakob-e
Last active August 29, 2015 14:15
Show Gist options
  • Save jakob-e/85669d248f084318a69c to your computer and use it in GitHub Desktop.
Save jakob-e/85669d248f084318a69c to your computer and use it in GitHub Desktop.
Generated by SassMeister.com. http://sassmeister.com/gist/85669d248f084318a69c
// ----
// 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} ';
}
}
}
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