Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions lab-catherine/.eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
**/node_modules/*
**/vendor/*
**/*.min.js
**/coverage/*
**/build/*
26 changes: 26 additions & 0 deletions lab-catherine/.eslintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{
"env": {
"browser": true,
"node": true,
"commonjs": true,
"jest": true,
"es6": true
},
"globals": {
"err": true,
"req": true,
"res": true,
"next": true
},
"extends": "eslint:recommended",
"parserOptions": {
"sourceType": "module"
},
"rules": {
"no-console": "off",
"indent": [ "error", 2 ],
"quotes": ["error", "single", { "allowTemplateLiterals": true }],
"comma-dangle": ["error", "always-multiline"],
"semi": [ "error", "always" ]
}
}
91 changes: 91 additions & 0 deletions lab-catherine/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
# Created by https://www.gitignore.io/api/osx,node

### Node ###
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Runtime data
pids
*.pid
*.seed
*.pid.lock

# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov

# Coverage directory used by tools like istanbul
coverage

# nyc test coverage
.nyc_output

# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt

# Bower dependency directory (https://bower.io/)
bower_components

# node-waf configuration
.lock-wscript

# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release

# Dependency directories
node_modules/
jspm_packages/

# Typescript v1 declaration files
typings/

# Optional npm cache directory
.npm

# Optional eslint cache
.eslintcache

# Optional REPL history
.node_repl_history

# Output of 'npm pack'
*.tgz

# Yarn Integrity file
.yarn-integrity

# dotenv environment variables file
.env


### OSX ###
*.DS_Store
.AppleDouble
.LSOverride

# Icon must end with two \r
Icon

# Thumbnails
._*

# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent

# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk

# End of https://www.gitignore.io/api/osx,node
3 changes: 3 additions & 0 deletions lab-catherine/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Lab 02: Tools and Context

In fp.js the exported module is an object with the following methods attached: fp.map, fp.filter, fp.reduce, and fp.slice. The fp.map function has an arity of two (callback and collection), the callback being a callback function that is tested in fp.test.js and collection being an array. The fp.filter function also has an arity of two (callback and collection), which are the callback function and the array. For both of these functions the arrays will only accept numbers as values and will otherwise return an error. The fp.reduce function has an arity of three (callback, collection, and initialState), which are the callback function, an array, and the starting value. In this case, the fp.reduce function only accepts numbers as values in the array. It will otherwise return an error. I also added an if statement so that initialState must also be a number. The fp.slice function has an arity of three (collection, begin, and end), which is the array, and the begin and end integers as are pertinent to the .slice functionality. If the array is empty, it will throw an error.
225 changes: 225 additions & 0 deletions lab-catherine/__test__/fp.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,225 @@
'use strict';

const fp = require('../lib/fp');

//++++++++++++++++++++++++++++++++++++
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

always delete uneccessary comments before submission

// catherine - fp.map test functions
//++++++++++++++++++++++++++++++++++++

describe('fp.test.js', () => {

describe(('testing to see if fp.map is functioning as expected'), () => {

test('testing that .map is functioning properly', () => {
expect(fp.map(a => a * 3,
[1, 2, 3]
)).toEqual([3, 6, 9]);
});
});

describe(('testing to see if fp.map contains invalid input'), () => {

test('will an error be thrown with an invalid callback', () => {
expect(() => {
fp.map('a',
[1, 2, 3]
);
}
).toThrow();
});

test('testing that .map collection must be an object', () => {
expect(() => {
fp.map(a => a * 3,
'hello'
);
}
).toThrow();
});

test('testing that .map will throw an error if empty', () => {
expect(() => {
fp.map(a => a * 3,
[]
);
}
).toThrow();
});

test('testing that .map will throw an error if passed a value that is not a number', () => {
expect(() => {
fp.map(a => {
a * 3;
},
[1, null, 3]
);
}
).toThrow();
});
});

//++++++++++++++++++++++++++++++++++++
// catherine - fp.filter test functions
//++++++++++++++++++++++++++++++++++++

describe(('testing to see if fp.filter is functioning as expected'), () => {
test('testing that .filter is functioning properly', () => {
expect(fp.filter(a => a < 3,
[1, 2, 3]
)).toEqual([1, 2]);
});
});

describe(('testing to see if fp.filter contains invalid input'), () => {

test('testing that .filter callback must be a function', () => {
expect(() => {
fp.filter('a',
[1, 2, 3]
);
}
).toThrow();
});

test('testing that .filter collection must be an object', () => {
expect(() => {
fp.filter(a => a * 3,
'hello'
);
}
).toThrow();
});

test('testing that .filter will throw an error if empty', () => {
expect(() => {
fp.filter(a => a * 3,
[]
);
}
).toThrow();
});

test('testing that .filter will throw an error if passed a value that is not a number', () => {
expect(() => {
fp.filter(a => {
a * 3;
},
[null, null, 3]
);
}
).toThrow();
});
});

//++++++++++++++++++++++++++++++++++++
// catherine - fp.reduce test functions
//++++++++++++++++++++++++++++++++++++

describe(('testing to see if fp.reduce is functioning as expected'), () => {

test('testing that .reduce is functioning properly', () => {
expect(fp.reduce(
(a,b) => (a + b),
[0, 1, 2],
0
)).toEqual(3);
});
});

describe(('testing to see if fp.reduce contains invalid input'), () => {

test('testing that .reduce callback must be a function', () => {
expect(() => {
fp.reduce('a,b',
[0, 1, 2],
0
);
}
).toThrow();
});

test('testing that initialState is a number', () => {
expect(() => {
fp.reduce(
(a,b) => a + b,
[0, 1, 2],
'a'
);
}
).toThrow();
});

test('testing that .reduce collection must be an object', () => {
expect(() => {
fp.reduce(
(a,b) => (a + b),
'hello',
0
);
}
).toThrow();
});

test('testing that .reduce will throw an error if empty', () => {
expect(() => {
fp.reduce(
(a,b) => a + b,
[],
0
);
}
).toThrow();
});

test('testing that .reduce will throw an error if passed a value that is not a number', () => {
expect(() => {
fp.reduce(
(a,b) => a + b,
[null, null, 3],
0
);
}
).toThrow();
});
});
});

//++++++++++++++++++++++++++++++++++++
// catherine - fp.slice test functions
//++++++++++++++++++++++++++++++++++++

describe(('testing to see if fp.slice is functioning as expected'), () => {

test('testing that .slice is functioning properly', () => {
expect(fp.slice(
[0, 1, 2, 3, 4, 5],
0,
2
)).toEqual([0, 1]);
});

describe(('testing to see if fp.slice contains invalid input'), () => {

test('testing that .slice collection must be an object', () => {
expect(() => {
fp.slice(
'hello',
0,
2
);
}
).toThrow();
});

test('testing that .slice will throw an error if empty', () => {
expect(() => {
fp.slice(
[],
0,
2
);
}
).toThrow();
});
});
});
Loading