redsum
v1.0.5
Published
Easy Reduce Sum
Downloads
1
Maintainers
Readme
redsum
Easy reduce sum
Utility to do the reduce sum, for multipurpose, developer friendly interface
- Fully typing with typescript
- Composable
- Unit testing 100% coverage
- Comprehensive testing
- No depedencies
Usage
On the way, temporary please look at unit testing to get an idea first
describe('flat array of object', () => {
const products = [
{ name: 'product1', stock: 3, selling: 1 },
{ name: 'product2', stock: 4, selling: 2 },
{ name: 'product3', stock: 5, selling: 3 },
{ name: 'product4', stock: 6, selling: 4 },
]
describe('extractors as access keys', () => {
it('should sum according to access keys', () => {
const [totalStock, totalSelling] = redsum(products, ['stock', 'selling'])
expect(totalStock).toBe(18)
expect(totalSelling).toBe(10)
})
it('should return single entry if provided with single access string', () => {
expect(redsum(products, 'stock')).toBe(18)
})
})
describe('extractors as functions', () => {
it('should sum according to functions', () => {
const [totalStock, totalSelling] = redsum(products,[
({ stock }) => stock * 10,
({ selling }) => selling * 10,
])
expect(totalStock).toBe(180)
expect(totalSelling).toBe(100)
})
it('should sum according to function', () => {
const totalStock = redsum(products, ({ stock }) => stock * 10)
expect(totalStock).toBe(180)
})
})
})
describe('nested', () => {
const products = [
{
name: 'product1',
subProducts: [
{ name: 'product1.1', stock: 5, providers: ['provider1', 'provider2', 'provider3']},
{ name: 'product1.2', stock: 6, providers: ['provider1', 'provider2']},
],
sellers: [
{ name: 'seller1', selling: 1 },
{ name: 'seller2', selling: 2 },
{ name: 'seller3', selling: 3 },
]
},
{
name: 'product2',
subProducts: [
{ name: 'product2.1', stock: 3, providers: ['provider1', 'provider3']},
{ name: 'product2.2', stock: 4, providers: ['provider1']},
],
sellers: [
{ name: 'seller1', selling: 2 },
{ name: 'seller2', selling: 1 },
]
},
{
name: 'product3',
subProducts: [
{ name: 'product3.1', stock: 8, providers: ['provider2', 'provider3']},
{ name: 'product3.2', stock: 9, providers: ['provider1', 'provider2']},
],
sellers: [
{ name: 'seller2', selling: 2 },
{ name: 'seller3', selling: 3 },
]
}
]
describe('sum by nested value by composing redsum', () => {
it('should sum by nested value', () => {
const totalStock = redsum(products,
({ subProducts }) => redsum(subProducts, 'stock')
)
expect(totalStock).toBe(35)
})
it('should sum by nested value2', () => {
const totalProvider = redsum(products,
({ subProducts }) => redsum(subProducts,
({ providers }) => providers.length
)
)
expect(totalProvider).toBe(12)
})
it('demonstrate complex scenario', () => {
const [totalStock, totalProvider, totalSeller, totalSelling] = redsum(products,[
({ subProducts }) => redsum(subProducts, 'stock'),
({ subProducts }) => redsum(subProducts,
({ providers }) => providers.length
),
({ sellers }) => sellers.length,
({ sellers }) => redsum(sellers, 'selling'),
])
expect([totalStock, totalProvider, totalSeller, totalSelling]).toEqual([35, 12, 7, 14])
})
})
})