Skip to content

Commit

Permalink
feat: consistent api
Browse files Browse the repository at this point in the history
  • Loading branch information
javiercejudo committed Feb 19, 2016
1 parent 2b4877c commit f4fd2da
Show file tree
Hide file tree
Showing 8 changed files with 43 additions and 28 deletions.
22 changes: 11 additions & 11 deletions README.md
Expand Up @@ -37,39 +37,39 @@ bc.symbols('⓿①②③④⑤⑥⑦⑧⑨ⒶⒷ', 8, 12, '⑦③'); //=> '④

```js
var bc = require('base-conversion');
var Decimal = require('arbitrary-precision')(require('bigjs-adapter'));
var toDecimalFactory = require('to-decimal-arbitrary-precision');
var Big = require('arbitrary-precision')(require('bigjs-adapter'));
var toBigFactory = require('to-decimal-arbitrary-precision');

var d = toDecimalFactory(Decimal);
var d = toBigFactory(Big);

// avoid large numbers to go into exponential notation (adapter dependent)
Decimal.Impl.E_POS = 50;
Big.Impl.E_POS = 50;

bc.big(d, 10, 9, '5678364565345634563456346757364563534534645745');
//=> '802531310452364303450750087576673257456135727727'

// equivalent but it skips a trivial decimal to decimal conversion
bc.fromDecimal(d, 9, '5678364565345634563456346757364563534534645745');
=> '802531310452364303450750087576673257456135727727'
bc.fromDecimalBig(d, 9, '5678364565345634563456346757364563534534645745');
//=> '802531310452364303450750087576673257456135727727'
```

## Full raw version

```js
var bc = require('base-conversion');
var Decimal = require('arbitrary-precision')(require('bigjs-adapter'));
var toDecimalFactory = require('to-decimal-arbitrary-precision');
var Big = require('arbitrary-precision')(require('bigjs-adapter'));
var toBigFactory = require('to-decimal-arbitrary-precision');

var d = toDecimalFactory(Decimal);
var d = toBigFactory(Big);

// avoid large numbers to go into exponential notation (adapter dependent)
Decimal.Impl.E_POS = 50;
Big.Impl.E_POS = 50;

bc.raw(d, '01234#6789', 10, 9, '#678364#6#34#634#634#63467#7364#63#34#3464#74#');
//=> '802#313104#23643034#07#0087#766732#74#613#727727'

// equivalent
bc.fromDecimal(d, '01234#6789', 9, '#678364#6#34#634#634#63467#7364#63#34#3464#74#');
bc.fromDecimalRaw(d, '01234#6789', 9, '#678364#6#34#634#634#63467#7364#63#34#3464#74#');
//=> '802#313104#23643034#07#0087#766732#74#613#727727'
```

Expand Down
2 changes: 1 addition & 1 deletion disc_generator.sh
Expand Up @@ -8,7 +8,7 @@ DISC=tmp/disc.html
DISC_MIN=tmp/disc.min.html
NODE_BIN=node_modules/.bin

browserify src/index.js --full-paths > $BUNDLE
$NODE_BIN/browserify src/index.js --full-paths > $BUNDLE
cat $BUNDLE | uglifyjs --mangle > $BUNDLE_MIN

echo -e '\nO_o Generating discs'
Expand Down
1 change: 1 addition & 0 deletions package.json
Expand Up @@ -26,6 +26,7 @@
"base-converter": "^1.1.2",
"bigint-base-converter": "^0.1.0",
"bigjs-adapter": "^2.4.0",
"browserify": "^13.0.0",
"disc": "^1.3.2",
"gulp": "^3.9.1",
"gulp-coverage": "^0.3.38",
Expand Down
3 changes: 2 additions & 1 deletion src/R.js
Expand Up @@ -15,5 +15,6 @@ module.exports = Object.freeze({
invoker: require('ramda/src/invoker'),
reduce: require('ramda/src/reduce'),
unfold: require('ramda/src/unfold'),
nth: require('ramda/src/nth')
nth: require('ramda/src/nth'),
memoize: require('ramda/src/memoize')
});
23 changes: 19 additions & 4 deletions src/index.js
Expand Up @@ -12,11 +12,19 @@ var defaultSymbols = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv
var toString = R.invoker(0, 'toString');
var curry4 = R.curryN(4);

var indexOfSymbol = R.memoize(function(symbols) {
return R.memoize(R.indexOf(R.__, symbols));
});

var nthSymbol = R.memoize(function(symbols) {
return R.memoize(R.nth(R.__, symbols));
});

var toDecimal = curry4(function(b, symbols, base, n) {
return R.pipe(
R.split(''),
R.reverse,
R.map(R.indexOf(R.__, symbols)),
R.map(indexOfSymbol(symbols)),
R.addIndex(R.map)(posNotation.mapper(b, base)),
R.reduce(R.invoker(1, 'plus'), b(0)),
toString
Expand All @@ -26,7 +34,7 @@ var toDecimal = curry4(function(b, symbols, base, n) {
var fromDecimal = curry4(function(b, symbols, base, n) {
return R.pipe(
R.unfold(posNotation.unfolder(b, base)),
R.map(R.nth(R.__, symbols)),
R.map(nthSymbol(symbols)),
R.reverse,
R.join('')
)(n);
Expand All @@ -46,8 +54,15 @@ convertBases.big = convertBasesRaw(R.__, defaultSymbols);
convertBases.symbols = convertBasesRaw(defaultB);
convertBases.raw = convertBasesRaw;

convertBases.toDecimal = toDecimal;
convertBases.fromDecimal = fromDecimal;
convertBases.toDecimal = toDecimal(defaultB, defaultSymbols);
convertBases.toDecimalBig = toDecimal(R.__, defaultSymbols);
convertBases.toDecimalSymbols = toDecimal(defaultB);
convertBases.toDecimalRaw = toDecimal;

convertBases.fromDecimal = fromDecimal(defaultB, defaultSymbols);
convertBases.fromDecimalBig = fromDecimal(R.__, defaultSymbols);
convertBases.fromDecimalSymbols = fromDecimal(defaultB);
convertBases.fromDecimalRaw = fromDecimal;

convertBases.defaultSymbols = defaultSymbols;
convertBases.defaultB = defaultB;
Expand Down
4 changes: 2 additions & 2 deletions test/base-converter.js
Expand Up @@ -9,7 +9,7 @@ var fn = require('../src/');

describe('base-converter', function() {
it('yields the same results for base 4', function() {
var b10To4 = fn(10, 4);
var b10To4 = fn.fromDecimal(4);

'3'
.should.be.exactly(other.decToGeneric(3, 4))
Expand All @@ -25,7 +25,7 @@ describe('base-converter', function() {
});

it('yields the same results for base 62', function() {
var b10To62 = fn.symbols('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 10, 62);
var b10To62 = fn.fromDecimalSymbols('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 62);

'X'
.should.be.exactly(other.decTo62(59))
Expand Down
8 changes: 4 additions & 4 deletions test/bigint-base-converter.js
Expand Up @@ -17,15 +17,15 @@ var fn = require('../src/');

describe('bigint-base-converter', function() {
it('yields the same results from base 16', function() {
var b16To10 = fn.toDecimal(d, fn.defaultSymbols, 16);
var b16To10 = fn.toDecimalBig(d, 16);

'21932261930451111902915077091070067066'
.should.be.exactly(other('108000000000000000080800200C417A', '0123456789ABCDEF', '0123456789'))
.and.exactly(b16To10('108000000000000000080800200C417A'));
});

it('yields the same results for base 16', function() {
var b16To10 = fn.fromDecimal(d, fn.defaultSymbols, 16);
var b16To10 = fn.fromDecimalBig(d, 16);

'108000000000000000080800200C417A'
.should.be.exactly(other('21932261930451111902915077091070067066', '0123456789', '0123456789ABCDEF'))
Expand All @@ -41,7 +41,7 @@ describe('bigint-base-converter', function() {
});

it('yields the same results from 10 to 85', function() {
var b10To85 = fn.fromDecimal(d, symbols85, 85);
var b10To85 = fn.fromDecimalRaw(d, symbols85, 85);

'4)+k&C#VzJ4br>0wv%Yp'
.should.be.exactly(other('21932261930451111902915077091070067066', '0123456789', symbols85))
Expand All @@ -59,6 +59,6 @@ describe('bigint-base-converter', function() {
it('yields the same results from 85 to 10', function() {
'21932261930451111902915077091070067066'
.should.be.exactly(other('4)+k&C#VzJ4br>0wv%Yp', symbols85, '0123456789'))
.and.exactly(fn.toDecimal(d, symbols85, 85, '4)+k&C#VzJ4br>0wv%Yp'));
.and.exactly(fn.toDecimalRaw(d, symbols85, 85, '4)+k&C#VzJ4br>0wv%Yp'));
});
});
8 changes: 3 additions & 5 deletions test/integer-base-converter.js
Expand Up @@ -6,12 +6,10 @@ require('should');

var other = require('integer-base-converter');
var fn = require('../src/');
var fromDecimal = fn.fromDecimal(fn.defaultB, fn.defaultSymbols);
var toDecimal = fn.toDecimal(fn.defaultB, fn.defaultSymbols);

describe('integer-base-converter', function() {
it('yields the same results for base 60', function() {
var b10To60 = fromDecimal(60);
var b10To60 = fn.fromDecimal(60);

'Ge'
.should.be.exactly(other.convert(1000, 10, 60))
Expand All @@ -23,7 +21,7 @@ describe('integer-base-converter', function() {
});

it('yields the same results from base 60', function() {
var b60To10 = toDecimal(60);
var b60To10 = fn.toDecimal(60);

'1000'
.should.be.exactly(other.convert('Ge', 60, 10).toString())
Expand All @@ -35,7 +33,7 @@ describe('integer-base-converter', function() {
});

it.skip('yields the same results for base 62', function() {
var b10To62 = fromDecimal(62);
var b10To62 = fn.fromDecimal(62);

'z'
.should.be.exactly(other.convert(61, 10, 62).toString())
Expand Down

0 comments on commit f4fd2da

Please sign in to comment.