Skip to content

Commit

Permalink
add Number#toPrecision, #156
Browse files Browse the repository at this point in the history
  • Loading branch information
zloirock committed Jan 31, 2016
1 parent 32aa7c2 commit b4404bd
Show file tree
Hide file tree
Showing 27 changed files with 223 additions and 9 deletions.
2 changes: 2 additions & 0 deletions build/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ module.exports = {
'es6.function.name',
'es6.function.has-instance',
'es6.number.constructor',
'es6.number.to-precision',
'es6.number.epsilon',
'es6.number.is-finite',
'es6.number.is-integer',
Expand Down Expand Up @@ -222,6 +223,7 @@ module.exports = {
'es6.array.reduce-right',
'es6.array.index-of',
'es6.array.last-index-of',
'es6.number.to-precision',
'es6.date.now',
'es6.date.to-iso-string',
'es6.date.to-json',
Expand Down
1 change: 1 addition & 0 deletions es5/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ require('../modules/es6.array.reduce');
require('../modules/es6.array.reduce-right');
require('../modules/es6.array.index-of');
require('../modules/es6.array.last-index-of');
require('../modules/es6.number.to-precision');
require('../modules/es6.date.now');
require('../modules/es6.date.to-iso-string');
require('../modules/es6.date.to-json');
Expand Down
1 change: 1 addition & 0 deletions es6/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ require('../modules/es6.function.has-instance');
require('../modules/es6.parse-int');
require('../modules/es6.parse-float');
require('../modules/es6.number.constructor');
require('../modules/es6.number.to-precision');
require('../modules/es6.number.epsilon');
require('../modules/es6.number.is-finite');
require('../modules/es6.number.is-integer');
Expand Down
1 change: 1 addition & 0 deletions es6/number.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
require('../modules/es6.number.constructor');
require('../modules/es6.number.to-precision');
require('../modules/es6.number.epsilon');
require('../modules/es6.number.is-finite');
require('../modules/es6.number.is-integer');
Expand Down
1 change: 1 addition & 0 deletions fn/number/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,6 @@ require('../../modules/es6.number.max-safe-integer');
require('../../modules/es6.number.min-safe-integer');
require('../../modules/es6.number.parse-float');
require('../../modules/es6.number.parse-int');
require('../../modules/es6.number.to-precision');
require('../../modules/core.number.iterator');
module.exports = require('../../modules/_core').Number;
2 changes: 2 additions & 0 deletions fn/number/to-precision.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
require('../../modules/es6.number.to-precision');
module.exports = require('../../modules/_core').Number.toPrecision;
5 changes: 4 additions & 1 deletion fn/number/virtual/index.js
Original file line number Diff line number Diff line change
@@ -1,2 +1,5 @@
require('../../../modules/core.number.iterator');
module.exports = {iterator: require('../../../modules/_iterators').Number};
module.exports = {
toPrecision: require('../../../modules/_entry-virtual')('Number').toPrecision,
iterator: require('../../../modules/_iterators').Number
};
2 changes: 2 additions & 0 deletions fn/number/virtual/to-precision.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
require('../../../modules/es6.number.to-precision');
module.exports = require('../../../modules/_entry-virtual')('Number').toPrecision;
1 change: 1 addition & 0 deletions library/es5/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ require('../modules/es6.array.reduce');
require('../modules/es6.array.reduce-right');
require('../modules/es6.array.index-of');
require('../modules/es6.array.last-index-of');
require('../modules/es6.number.to-precision');
require('../modules/es6.date.now');
require('../modules/es6.date.to-iso-string');
require('../modules/es6.date.to-json');
Expand Down
1 change: 1 addition & 0 deletions library/es6/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ require('../modules/es6.function.has-instance');
require('../modules/es6.parse-int');
require('../modules/es6.parse-float');
require('../modules/es6.number.constructor');
require('../modules/es6.number.to-precision');
require('../modules/es6.number.epsilon');
require('../modules/es6.number.is-finite');
require('../modules/es6.number.is-integer');
Expand Down
1 change: 1 addition & 0 deletions library/es6/number.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
require('../modules/es6.number.constructor');
require('../modules/es6.number.to-precision');
require('../modules/es6.number.epsilon');
require('../modules/es6.number.is-finite');
require('../modules/es6.number.is-integer');
Expand Down
1 change: 1 addition & 0 deletions library/fn/number/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,6 @@ require('../../modules/es6.number.max-safe-integer');
require('../../modules/es6.number.min-safe-integer');
require('../../modules/es6.number.parse-float');
require('../../modules/es6.number.parse-int');
require('../../modules/es6.number.to-precision');
require('../../modules/core.number.iterator');
module.exports = require('../../modules/_core').Number;
2 changes: 2 additions & 0 deletions library/fn/number/to-precision.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
require('../../modules/es6.number.to-precision');
module.exports = require('../../modules/_core').Number.toPrecision;
5 changes: 4 additions & 1 deletion library/fn/number/virtual/index.js
Original file line number Diff line number Diff line change
@@ -1,2 +1,5 @@
require('../../../modules/core.number.iterator');
module.exports = {iterator: require('../../../modules/_iterators').Number};
module.exports = {
toPrecision: require('../../../modules/_entry-virtual')('Number').toPrecision,
iterator: require('../../../modules/_iterators').Number
};
2 changes: 2 additions & 0 deletions library/fn/number/virtual/to-precision.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
require('../../../modules/es6.number.to-precision');
module.exports = require('../../../modules/_entry-virtual')('Number').toPrecision;
11 changes: 11 additions & 0 deletions library/modules/es6.number.to-precision.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
'use strict';
var $export = require('./_export')
, $toPrecision = 1..toPrecision;

$export($export.P + $export.F * require('./_fails')(function(){
return $toPrecision.call(1, undefined) !== '1';
}), 'Number', {
toPrecision: function toPrecision(precision){
return precision === undefined ? $toPrecision.call(this) : $toPrecision.call(this, precision);
}
});
1 change: 1 addition & 0 deletions library/shim.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ require('./modules/es6.function.has-instance');
require('./modules/es6.parse-int');
require('./modules/es6.parse-float');
require('./modules/es6.number.constructor');
require('./modules/es6.number.to-precision');
require('./modules/es6.number.epsilon');
require('./modules/es6.number.is-finite');
require('./modules/es6.number.is-integer');
Expand Down
2 changes: 1 addition & 1 deletion modules/_export.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ var $export = function(type, name, source){
// bind timers to global for call from export context
exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
// extend global
if(target && !own)redefine(target, key, out, type & $export.U);
if(target)redefine(target, key, out, type & $export.U);
// export
if(exports[key] != out)hide(exports, key, exp);
if(IS_PROTO && expProto[key] != out)expProto[key] = out;
Expand Down
12 changes: 6 additions & 6 deletions modules/_redefine.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
// add fake Function#toString
// for correct work wrapped methods / constructors with methods like LoDash isNative
var global = require('./_global')
, hide = require('./_hide')
, has = require('./_has')
, SRC = require('./_uid')('src')
, TO_STRING = 'toString'
, $toString = Function[TO_STRING]
Expand All @@ -12,10 +11,10 @@ require('./_core').inspectSource = function(it){
};

(module.exports = function(O, key, val, safe){
if(typeof val == 'function'){
val.hasOwnProperty(SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));
val.hasOwnProperty('name') || hide(val, 'name', key);
}
var isFunction = typeof val == 'function';
if(isFunction)has(val, 'name') || hide(val, 'name', key);
if(O[key] === val)return;
if(isFunction)has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));
if(O === global){
O[key] = val;
} else {
Expand All @@ -27,6 +26,7 @@ require('./_core').inspectSource = function(it){
else hide(O, key, val);
}
}
// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
})(Function.prototype, TO_STRING, function toString(){
return typeof this == 'function' && this[SRC] || $toString.call(this);
});
11 changes: 11 additions & 0 deletions modules/es6.number.to-precision.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
'use strict';
var $export = require('./_export')
, $toPrecision = 1..toPrecision;

$export($export.P + $export.F * require('./_fails')(function(){
return $toPrecision.call(1, undefined) !== '1';
}), 'Number', {
toPrecision: function toPrecision(precision){
return precision === undefined ? $toPrecision.call(this) : $toPrecision.call(this, precision);
}
});
1 change: 1 addition & 0 deletions shim.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ require('./modules/es6.function.has-instance');
require('./modules/es6.parse-int');
require('./modules/es6.parse-float');
require('./modules/es6.number.constructor');
require('./modules/es6.number.to-precision');
require('./modules/es6.number.epsilon');
require('./modules/es6.number.is-finite');
require('./modules/es6.number.is-integer');
Expand Down
2 changes: 2 additions & 0 deletions tests/commonjs.ls
Original file line number Diff line number Diff line change
Expand Up @@ -112,10 +112,12 @@ for P in <[.. ../library]>
ok require("#P/fn/number/min-safe-integer") is -0x1fffffffffffff
ok require("#P/fn/number/parse-float")('1.5') is 1.5
ok require("#P/fn/number/parse-int")('2.1') is 2
ok require("#P/fn/number/to-precision")(1) is \1
ok require("#P/fn/parse-float")('1.5') is 1.5
ok require("#P/fn/parse-int")('2.1') is 2
ok \next of require("#P/fn/number/iterator") 42
ok \next of require("#P/fn/number/virtual/iterator").call 42
ok require("#P/fn/number/virtual/to-precision").call(1) is \1
ok \next of require("#P/fn/number/virtual").iterator.call 42
ok \isNaN of require("#P/fn/number")
ok require("#P/fn/reflect/apply")(((a, b)-> a + b), null, [1, 2]) is 3
Expand Down
42 changes: 42 additions & 0 deletions tests/es.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

39 changes: 39 additions & 0 deletions tests/library.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 19 additions & 0 deletions tests/library/es6.number.to-precision.ls
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{module, test} = QUnit
module \ES6

test 'Number#toPrecision' (assert)!->
{toPrecision} = core.Number
assert.isFunction toPrecision
assert.same toPrecision(0.00008 3), '0.0000800'
assert.same toPrecision(1.255 2), '1.3'
assert.same toPrecision(1843654265.0774949 13), '1843654265.077'
assert.same toPrecision(NaN, 1), 'NaN'
assert.same toPrecision(123.456), '123.456'
assert.same toPrecision(123.456 void), '123.456'
assert.throws (!-> toPrecision 0.9 0), RangeError
assert.throws (!-> toPrecision 0.9 101), RangeError
assert.throws (-> toPrecision {}, 1), TypeError
assert.throws (-> toPrecision \123, 1), TypeError
assert.throws (-> toPrecision no, 1), TypeError
assert.throws (-> toPrecision null, 1), TypeError
assert.throws (-> toPrecision void, 1), TypeError
42 changes: 42 additions & 0 deletions tests/tests.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 22 additions & 0 deletions tests/tests/es6.number.to-precision.ls
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{module, test} = QUnit
module \ES6

test 'Number#toPrecision' (assert)!->
{toPrecision} = Number::
assert.isFunction toPrecision
assert.name toPrecision, \toPrecision
assert.arity toPrecision, 1
assert.looksNative toPrecision
assert.same 0.00008.toPrecision(3), '0.0000800'
assert.same 1.255.toPrecision(2), '1.3'
assert.same 1843654265.0774949.toPrecision(13), '1843654265.077'
assert.same NaN.toPrecision(1), 'NaN'
assert.same 123.456.toPrecision!, '123.456'
assert.same 123.456.toPrecision(void), '123.456'
assert.throws (!-> 0.9.toPrecision 0), RangeError
assert.throws (!-> 0.9.toPrecision 101), RangeError
assert.throws (-> toPrecision.call {}, 1), TypeError
assert.throws (-> toPrecision.call \123, 1), TypeError
assert.throws (-> toPrecision.call no, 1), TypeError
assert.throws (-> toPrecision.call null, 1), TypeError
assert.throws (-> toPrecision.call void, 1), TypeError

0 comments on commit b4404bd

Please sign in to comment.