mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2025-12-12 12:22:12 +00:00
Merge pull request #104 from codecop/master
Minor cleanups and a brand new port to Scheme language
This commit is contained in:
commit
8fed3395d7
7
.gitignore
vendored
7
.gitignore
vendored
@ -1,7 +0,0 @@
|
|||||||
.idea/workspace.xml
|
|
||||||
*.pyc
|
|
||||||
/perl6/lib/.precomp
|
|
||||||
/elixir/_build/
|
|
||||||
python/.cache
|
|
||||||
python/.coverage
|
|
||||||
**/.idea
|
|
||||||
@ -1 +0,0 @@
|
|||||||
GuildedRose
|
|
||||||
@ -1,23 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="CompilerConfiguration">
|
|
||||||
<option name="DEFAULT_COMPILER" value="Javac" />
|
|
||||||
<resourceExtensions />
|
|
||||||
<wildcardResourcePatterns>
|
|
||||||
<entry name="!?*.java" />
|
|
||||||
<entry name="!?*.form" />
|
|
||||||
<entry name="!?*.class" />
|
|
||||||
<entry name="!?*.groovy" />
|
|
||||||
<entry name="!?*.scala" />
|
|
||||||
<entry name="!?*.flex" />
|
|
||||||
<entry name="!?*.kt" />
|
|
||||||
<entry name="!?*.clj" />
|
|
||||||
</wildcardResourcePatterns>
|
|
||||||
<annotationProcessing>
|
|
||||||
<profile default="true" name="Default" enabled="false">
|
|
||||||
<processorPath useClasspath="true" />
|
|
||||||
</profile>
|
|
||||||
</annotationProcessing>
|
|
||||||
</component>
|
|
||||||
</project>
|
|
||||||
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
<component name="CopyrightManager">
|
|
||||||
<settings default="" />
|
|
||||||
</component>
|
|
||||||
@ -1,5 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
|
|
||||||
</project>
|
|
||||||
|
|
||||||
@ -1,10 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="EntryPointsManager">
|
|
||||||
<entry_points version="2.0" />
|
|
||||||
</component>
|
|
||||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_5" assert-keyword="true" jdk-15="true" project-jdk-name="1.7" project-jdk-type="JavaSDK">
|
|
||||||
<output url="file://$PROJECT_DIR$/out" />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
||||||
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="ProjectModuleManager">
|
|
||||||
<modules>
|
|
||||||
<module fileurl="file://$PROJECT_DIR$/Java/Java.iml" filepath="$PROJECT_DIR$/Java/Java.iml" />
|
|
||||||
</modules>
|
|
||||||
</component>
|
|
||||||
</project>
|
|
||||||
@ -1,5 +0,0 @@
|
|||||||
<component name="DependencyValidationManager">
|
|
||||||
<state>
|
|
||||||
<option name="SKIP_IMPORT_STATEMENTS" value="false" />
|
|
||||||
</state>
|
|
||||||
</component>
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="VcsDirectoryMappings">
|
|
||||||
<mapping directory="" vcs="" />
|
|
||||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
||||||
|
|
||||||
File diff suppressed because one or more lines are too long
@ -1,17 +1,14 @@
|
|||||||
{
|
{
|
||||||
"name": "typescript-mocha-kata-seed",
|
"name": "gilded-rose-kata",
|
||||||
"version": "1.4.0",
|
"version": "1.0.0",
|
||||||
"description": "Seed project for TDD code katas on TypeScript and mocha",
|
"description": "Gilded Rose kata in TypeScript",
|
||||||
"main": "index.js",
|
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"precompile": "rimraf app/**/*.js test/**/*.js",
|
"precompile": "rimraf app/**/*.js test/**/*.js",
|
||||||
"compile": "tsc",
|
"compile": "tsc",
|
||||||
"pretest": "rimraf app/**/*.js test/**/*.js",
|
"pretest": "rimraf app/**/*.js test/**/*.js",
|
||||||
"test": "nyc mocha"
|
"test": "nyc mocha"
|
||||||
},
|
},
|
||||||
"author": "paucls",
|
"license": "MIT",
|
||||||
"homepage": "https://github.com/paucls/typescript-mocha-kata-seed",
|
|
||||||
"license": "ISC",
|
|
||||||
"private": true,
|
"private": true,
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/chai": "~3.5.2",
|
"@types/chai": "~3.5.2",
|
||||||
@ -21,8 +18,9 @@
|
|||||||
"mocha": "~3.2.0",
|
"mocha": "~3.2.0",
|
||||||
"nyc": "~11.0.3",
|
"nyc": "~11.0.3",
|
||||||
"rimraf": "~2.5.2",
|
"rimraf": "~2.5.2",
|
||||||
|
"source-map-support": "0.5.9",
|
||||||
"ts-node": "~3.1.0",
|
"ts-node": "~3.1.0",
|
||||||
"typescript": "~2.2.0"
|
"typescript": "~3.0.3"
|
||||||
},
|
},
|
||||||
"nyc": {
|
"nyc": {
|
||||||
"extension": [
|
"extension": [
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"module": "commonjs",
|
"module": "commonjs",
|
||||||
"target": "es5",
|
"target": "es5",
|
||||||
|
"strict": true,
|
||||||
"noImplicitAny": false,
|
"noImplicitAny": false,
|
||||||
"sourceMap": false
|
"sourceMap": false
|
||||||
},
|
},
|
||||||
|
|||||||
1
elixir/.gitignore
vendored
Normal file
1
elixir/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
_build/
|
||||||
@ -3,7 +3,7 @@
|
|||||||
- Run :
|
- Run :
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
go run gilded-rose.go
|
go run texttest_fixture.go gilded-rose.go
|
||||||
```
|
```
|
||||||
|
|
||||||
- Run tests :
|
- Run tests :
|
||||||
@ -1,28 +1,11 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import "fmt"
|
|
||||||
|
|
||||||
type Item struct {
|
type Item struct {
|
||||||
name string
|
name string
|
||||||
sellIn, quality int
|
sellIn, quality int
|
||||||
}
|
}
|
||||||
|
|
||||||
var items = []Item{
|
func UpdateQuality(items []*Item) {
|
||||||
Item{"+5 Dexterity Vest", 10, 20},
|
|
||||||
Item{"Aged Brie", 2, 0},
|
|
||||||
Item{"Elixir of the Mongoose", 5, 7},
|
|
||||||
Item{"Sulfuras, Hand of Ragnaros", 0, 80},
|
|
||||||
Item{"Backstage passes to a TAFKAL80ETC concert", 15, 20},
|
|
||||||
Item{"Conjured Mana Cake", 3, 6},
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
fmt.Println("OMGHAI!")
|
|
||||||
// fmt.Print(items)
|
|
||||||
GildedRose()
|
|
||||||
}
|
|
||||||
|
|
||||||
func GildedRose() {
|
|
||||||
for i := 0; i < len(items); i++ {
|
for i := 0; i < len(items); i++ {
|
||||||
|
|
||||||
if items[i].name != "Aged Brie" && items[i].name != "Backstage passes to a TAFKAL80ETC concert" {
|
if items[i].name != "Aged Brie" && items[i].name != "Backstage passes to a TAFKAL80ETC concert" {
|
||||||
|
|||||||
@ -2,6 +2,14 @@ package main
|
|||||||
|
|
||||||
import "testing"
|
import "testing"
|
||||||
|
|
||||||
func Test_GildedRose(t *testing.T) {
|
func Test_Foo(t *testing.T) {
|
||||||
main()
|
var items = []*Item{
|
||||||
|
&Item{"foo", 0, 0},
|
||||||
|
}
|
||||||
|
|
||||||
|
UpdateQuality(items)
|
||||||
|
|
||||||
|
if items[0].name != "fixme" {
|
||||||
|
t.Errorf("Name: Expected %s but got %s ", "fixme", items[0].name)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
44
go/texttest_fixture.go
Normal file
44
go/texttest_fixture.go
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
fmt.Println("OMGHAI!")
|
||||||
|
|
||||||
|
var items = []*Item{
|
||||||
|
&Item{"+5 Dexterity Vest", 10, 20},
|
||||||
|
&Item{"Aged Brie", 2, 0},
|
||||||
|
&Item{"Elixir of the Mongoose", 5, 7},
|
||||||
|
&Item{"Sulfuras, Hand of Ragnaros", 0, 80},
|
||||||
|
&Item{"Sulfuras, Hand of Ragnaros", -1, 80},
|
||||||
|
&Item{"Backstage passes to a TAFKAL80ETC concert", 15, 20},
|
||||||
|
&Item{"Backstage passes to a TAFKAL80ETC concert", 10, 49},
|
||||||
|
&Item{"Backstage passes to a TAFKAL80ETC concert", 5, 49},
|
||||||
|
&Item{"Conjured Mana Cake", 3, 6}, // <-- :O
|
||||||
|
}
|
||||||
|
|
||||||
|
days := 2
|
||||||
|
var err error
|
||||||
|
if len(os.Args) > 1 {
|
||||||
|
days, err = strconv.Atoi(os.Args[1])
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err.Error())
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
days++
|
||||||
|
}
|
||||||
|
|
||||||
|
for day := 0; day < days; day++ {
|
||||||
|
fmt.Printf("-------- day %d --------\n", day)
|
||||||
|
fmt.Println("name, sellIn, quality")
|
||||||
|
for i := 0; i < len(items); i++ {
|
||||||
|
fmt.Println(items[i])
|
||||||
|
}
|
||||||
|
fmt.Println("")
|
||||||
|
UpdateQuality(items)
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "gilded-rose",
|
"name": "gilded-rose-kata",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"description": "gilded rose kata in javascript",
|
"description": "Gilded Rose kata in Javascript with Jasmine",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "jasmine"
|
"test": "jasmine"
|
||||||
},
|
},
|
||||||
@ -19,8 +19,21 @@
|
|||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://github.com/emilybache/GildedRose-Refactoring-Kata/issues"
|
"url": "https://github.com/emilybache/GildedRose-Refactoring-Kata/issues"
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/emilybache/GildedRose-Refactoring-Kata#readme",
|
"homepage": "https://github.com/emilybache/GildedRose-Refactoring-Kata",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"babel-core": "^6.26.0",
|
||||||
|
"babel-preset-env": "1.7.0",
|
||||||
|
"babel-register": "^6.26.0",
|
||||||
"jasmine": "^3.2.0"
|
"jasmine": "^3.2.0"
|
||||||
|
},
|
||||||
|
"babel": {
|
||||||
|
"presets": [
|
||||||
|
[
|
||||||
|
"env", {
|
||||||
|
"targets": { "node": "current" }
|
||||||
|
}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"plugins": []
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
11
js-jasmine/spec/support/jasmine.json
Normal file
11
js-jasmine/spec/support/jasmine.json
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"spec_dir": "spec",
|
||||||
|
"spec_files": [
|
||||||
|
"**/*[sS]pec.js"
|
||||||
|
],
|
||||||
|
"helpers": [
|
||||||
|
"../node_modules/babel-register/lib/node.js"
|
||||||
|
],
|
||||||
|
"oneFailurePerSpec": false,
|
||||||
|
"randomizeTests": true
|
||||||
|
}
|
||||||
@ -1,9 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "gilded-rose",
|
"name": "gilded-rose-kata",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"description": "gilded rose kata in javascript",
|
"description": "Gilded Rose kata in Javascript with Mocha",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "mocha"
|
"test": "mocha --compilers js:babel/register"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@ -19,8 +19,9 @@
|
|||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://github.com/emilybache/GildedRose-Refactoring-Kata/issues"
|
"url": "https://github.com/emilybache/GildedRose-Refactoring-Kata/issues"
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/emilybache/GildedRose-Refactoring-Kata#readme",
|
"homepage": "https://github.com/emilybache/GildedRose-Refactoring-Kata",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"babel": "^5.8.23",
|
||||||
"chai": "^4.2.0",
|
"chai": "^4.2.0",
|
||||||
"mocha": "^5.2.0"
|
"mocha": "^5.2.0"
|
||||||
}
|
}
|
||||||
112
js/jasmine/package-lock.json
generated
112
js/jasmine/package-lock.json
generated
@ -1,112 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "gilded-rose",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"lockfileVersion": 1,
|
|
||||||
"requires": true,
|
|
||||||
"dependencies": {
|
|
||||||
"balanced-match": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"brace-expansion": {
|
|
||||||
"version": "1.1.11",
|
|
||||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
|
|
||||||
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"balanced-match": "1.0.0",
|
|
||||||
"concat-map": "0.0.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"concat-map": {
|
|
||||||
"version": "0.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
|
||||||
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"fs.realpath": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"glob": {
|
|
||||||
"version": "7.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
|
|
||||||
"integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"fs.realpath": "1.0.0",
|
|
||||||
"inflight": "1.0.6",
|
|
||||||
"inherits": "2.0.3",
|
|
||||||
"minimatch": "3.0.4",
|
|
||||||
"once": "1.4.0",
|
|
||||||
"path-is-absolute": "1.0.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"inflight": {
|
|
||||||
"version": "1.0.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
|
|
||||||
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"once": "1.4.0",
|
|
||||||
"wrappy": "1.0.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"inherits": {
|
|
||||||
"version": "2.0.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
|
|
||||||
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"jasmine": {
|
|
||||||
"version": "3.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.2.0.tgz",
|
|
||||||
"integrity": "sha512-qv6TZ32r+slrQz8fbx2EhGbD9zlJo3NwPrpLK1nE8inILtZO9Fap52pyHk7mNTh4tG50a+1+tOiWVT3jO5I0Sg==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"glob": "7.1.2",
|
|
||||||
"jasmine-core": "3.2.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"jasmine-core": {
|
|
||||||
"version": "3.2.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.2.1.tgz",
|
|
||||||
"integrity": "sha512-pa9tbBWgU0EE4SWgc85T4sa886ufuQdsgruQANhECYjwqgV4z7Vw/499aCaP8ZH79JDS4vhm8doDG9HO4+e4sA==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"minimatch": {
|
|
||||||
"version": "3.0.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
|
|
||||||
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"brace-expansion": "1.1.11"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"once": {
|
|
||||||
"version": "1.4.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
|
||||||
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"wrappy": "1.0.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"path-is-absolute": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
|
|
||||||
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"wrappy": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
|
||||||
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
|
|
||||||
"dev": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,11 +0,0 @@
|
|||||||
{
|
|
||||||
"spec_dir": "spec",
|
|
||||||
"spec_files": [
|
|
||||||
"**/*[sS]pec.js"
|
|
||||||
],
|
|
||||||
"helpers": [
|
|
||||||
"helpers/**/*.js"
|
|
||||||
],
|
|
||||||
"stopSpecOnExpectationFailure": false,
|
|
||||||
"random": true
|
|
||||||
}
|
|
||||||
249
js/mocha/package-lock.json
generated
249
js/mocha/package-lock.json
generated
@ -1,249 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "gilded-rose",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"lockfileVersion": 1,
|
|
||||||
"requires": true,
|
|
||||||
"dependencies": {
|
|
||||||
"assertion-error": {
|
|
||||||
"version": "1.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
|
|
||||||
"integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"balanced-match": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"brace-expansion": {
|
|
||||||
"version": "1.1.11",
|
|
||||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
|
|
||||||
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"balanced-match": "1.0.0",
|
|
||||||
"concat-map": "0.0.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"browser-stdout": {
|
|
||||||
"version": "1.3.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
|
|
||||||
"integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"chai": {
|
|
||||||
"version": "4.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz",
|
|
||||||
"integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"assertion-error": "1.1.0",
|
|
||||||
"check-error": "1.0.2",
|
|
||||||
"deep-eql": "3.0.1",
|
|
||||||
"get-func-name": "2.0.0",
|
|
||||||
"pathval": "1.1.0",
|
|
||||||
"type-detect": "4.0.8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"check-error": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
|
|
||||||
"integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"commander": {
|
|
||||||
"version": "2.15.1",
|
|
||||||
"resolved": "http://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
|
|
||||||
"integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"concat-map": {
|
|
||||||
"version": "0.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
|
||||||
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"debug": {
|
|
||||||
"version": "3.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
|
|
||||||
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"ms": "2.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"deep-eql": {
|
|
||||||
"version": "3.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
|
|
||||||
"integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"type-detect": "4.0.8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"diff": {
|
|
||||||
"version": "3.5.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
|
|
||||||
"integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"escape-string-regexp": {
|
|
||||||
"version": "1.0.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
|
|
||||||
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"fs.realpath": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"get-func-name": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
|
|
||||||
"integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"glob": {
|
|
||||||
"version": "7.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
|
|
||||||
"integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"fs.realpath": "1.0.0",
|
|
||||||
"inflight": "1.0.6",
|
|
||||||
"inherits": "2.0.3",
|
|
||||||
"minimatch": "3.0.4",
|
|
||||||
"once": "1.4.0",
|
|
||||||
"path-is-absolute": "1.0.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"growl": {
|
|
||||||
"version": "1.10.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
|
|
||||||
"integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"has-flag": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
|
|
||||||
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"he": {
|
|
||||||
"version": "1.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
|
|
||||||
"integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"inflight": {
|
|
||||||
"version": "1.0.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
|
|
||||||
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"once": "1.4.0",
|
|
||||||
"wrappy": "1.0.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"inherits": {
|
|
||||||
"version": "2.0.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
|
|
||||||
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"minimatch": {
|
|
||||||
"version": "3.0.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
|
|
||||||
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"brace-expansion": "1.1.11"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"minimist": {
|
|
||||||
"version": "0.0.8",
|
|
||||||
"resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
|
|
||||||
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"mkdirp": {
|
|
||||||
"version": "0.5.1",
|
|
||||||
"resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
|
|
||||||
"integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"minimist": "0.0.8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"mocha": {
|
|
||||||
"version": "5.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz",
|
|
||||||
"integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"browser-stdout": "1.3.1",
|
|
||||||
"commander": "2.15.1",
|
|
||||||
"debug": "3.1.0",
|
|
||||||
"diff": "3.5.0",
|
|
||||||
"escape-string-regexp": "1.0.5",
|
|
||||||
"glob": "7.1.2",
|
|
||||||
"growl": "1.10.5",
|
|
||||||
"he": "1.1.1",
|
|
||||||
"minimatch": "3.0.4",
|
|
||||||
"mkdirp": "0.5.1",
|
|
||||||
"supports-color": "5.4.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ms": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
|
||||||
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"once": {
|
|
||||||
"version": "1.4.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
|
||||||
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"wrappy": "1.0.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"path-is-absolute": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
|
|
||||||
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"pathval": {
|
|
||||||
"version": "1.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz",
|
|
||||||
"integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"supports-color": {
|
|
||||||
"version": "5.4.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
|
|
||||||
"integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"has-flag": "3.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"type-detect": {
|
|
||||||
"version": "4.0.8",
|
|
||||||
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
|
|
||||||
"integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"wrappy": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
|
||||||
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
|
|
||||||
"dev": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
1
perl6/.gitignore
vendored
Normal file
1
perl6/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
lib/.precomp
|
||||||
5
python/.gitignore
vendored
Normal file
5
python/.gitignore
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
*.pyc
|
||||||
|
.cache
|
||||||
|
.coverage
|
||||||
|
.idea/
|
||||||
|
*.iml
|
||||||
18
scheme/README.md
Normal file
18
scheme/README.md
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# Scheme port of the Gilded-Rose Kata
|
||||||
|
|
||||||
|
This is a (Gambit) R5RS Scheme port of the *Gilded-Rose-Kata*.
|
||||||
|
|
||||||
|
## Building and Running
|
||||||
|
|
||||||
|
```shell
|
||||||
|
gsi texttest-fixture.scm
|
||||||
|
```
|
||||||
|
|
||||||
|
## Unit Test
|
||||||
|
|
||||||
|
`assert.scm` is a minimalist implementation of xUnit in Scheme style.
|
||||||
|
There are two assertions available, e.g. `(assert=)` and `(assert-string=)`.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
gsi gilded-rose-test.scm
|
||||||
|
```
|
||||||
58
scheme/assert.scm
Normal file
58
scheme/assert.scm
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
;;;
|
||||||
|
;;; Unit test framework for Scheme
|
||||||
|
;;; Copyright (c) 2018, Peter Kofler, http://www.code-cop.org/
|
||||||
|
;;; BSD licensed.
|
||||||
|
;;;
|
||||||
|
;;; Non S5RS used functions:
|
||||||
|
;;; * (error) from R6RS
|
||||||
|
;;;
|
||||||
|
|
||||||
|
;; SchemeUnit from http://c2.com/cgi/wiki?SchemeUnit
|
||||||
|
|
||||||
|
(define (fail msg)
|
||||||
|
(error (string-append "AssertionError" ": " msg)))
|
||||||
|
|
||||||
|
(define (check msg condition)
|
||||||
|
(if (not condition)
|
||||||
|
(fail msg)
|
||||||
|
#t))
|
||||||
|
|
||||||
|
(define (assert msg condition)
|
||||||
|
(lambda () (check msg condition)))
|
||||||
|
|
||||||
|
;; extensions
|
||||||
|
|
||||||
|
;; private
|
||||||
|
(define (make-string-message prefix to-string expected actual)
|
||||||
|
(make-message prefix
|
||||||
|
(to-string expected)
|
||||||
|
(to-string actual)))
|
||||||
|
|
||||||
|
;; private
|
||||||
|
(define (make-message prefix expected actual)
|
||||||
|
(string-append prefix "expected:<" expected "> but was:<" actual ">"))
|
||||||
|
|
||||||
|
(define (assert-equal to-string eq-op expected actual)
|
||||||
|
(assert (make-string-message "" to-string expected actual)
|
||||||
|
(eq-op expected actual)))
|
||||||
|
|
||||||
|
(define (assert= expected actual)
|
||||||
|
(assert-equal number->string = expected actual))
|
||||||
|
|
||||||
|
(define (assert-string= expected actual)
|
||||||
|
(assert-equal values string=? expected actual))
|
||||||
|
|
||||||
|
;; private
|
||||||
|
(define (test-case-name name)
|
||||||
|
(display name)
|
||||||
|
(display " ... "))
|
||||||
|
|
||||||
|
;; private
|
||||||
|
(define (test-case-success)
|
||||||
|
(display "OK")
|
||||||
|
(newline))
|
||||||
|
|
||||||
|
(define (test-case name . assertions)
|
||||||
|
(test-case-name name)
|
||||||
|
(for-each (lambda (a) (a)) assertions)
|
||||||
|
(test-case-success))
|
||||||
7
scheme/gilded-rose-test.scm
Normal file
7
scheme/gilded-rose-test.scm
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
(include "assert.scm")
|
||||||
|
(include "gilded-rose.scm")
|
||||||
|
|
||||||
|
(test-case "foo"
|
||||||
|
(let ((items (list (make-item "foo" 0 0))))
|
||||||
|
(update-quality items)
|
||||||
|
(assert-string= "fixme" (item-name (car items)))))
|
||||||
46
scheme/gilded-rose.scm
Normal file
46
scheme/gilded-rose.scm
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
;;; Class ITEM
|
||||||
|
|
||||||
|
(define-record-type item (make-item name sell-in quality) item? name sell-in quality)
|
||||||
|
;; define-record-type ... SRFI-9
|
||||||
|
;; creates make-item, item?, item-name, item-sell-in, item-quality, item-name-set!, item-sell-in-set!, item-quality-set!
|
||||||
|
|
||||||
|
(define (item-to-string item)
|
||||||
|
(string-append (item-name item)
|
||||||
|
", "
|
||||||
|
(number->string (item-sell-in item))
|
||||||
|
", "
|
||||||
|
(number->string (item-quality item))))
|
||||||
|
|
||||||
|
;;; GILDED-ROSE
|
||||||
|
|
||||||
|
(define (update-quality items)
|
||||||
|
(for-each
|
||||||
|
(lambda (item)
|
||||||
|
(if (and (not (string=? (item-name item) "Aged Brie"))
|
||||||
|
(not (string=? (item-name item) "Backstage passes to a TAFKAL80ETC concert")))
|
||||||
|
(if (> (item-quality item) 0)
|
||||||
|
(if (not (string=? (item-name item) "Sulfuras, Hand of Ragnaros"))
|
||||||
|
(item-quality-set! item (- (item-quality item) 1))))
|
||||||
|
(cond ((< (item-quality item) 50)
|
||||||
|
(item-quality-set! item (+ (item-quality item) 1))
|
||||||
|
(if (string=? (item-name item) "Backstage passes to a TAFKAL80ETC concert")
|
||||||
|
(if (< (item-sell-in item) 11)
|
||||||
|
(cond ((< (item-quality item) 50)
|
||||||
|
(item-quality-set! item (+ (item-quality item) 1))
|
||||||
|
(if (< (item-sell-in item) 6)
|
||||||
|
(if (< (item-quality item) 50)
|
||||||
|
(item-quality-set! item (+ (item-quality item) 1)))))))))))
|
||||||
|
|
||||||
|
(if (not (string=? (item-name item) "Sulfuras, Hand of Ragnaros"))
|
||||||
|
(item-sell-in-set! item (- (item-sell-in item) 1)))
|
||||||
|
|
||||||
|
(if (< (item-sell-in item) 0)
|
||||||
|
(if (not (string=? (item-name item) "Aged Brie"))
|
||||||
|
(if (not (string=? (item-name item) "Backstage passes to a TAFKAL80ETC concert"))
|
||||||
|
(if (> (item-quality item) 0)
|
||||||
|
(if (not (string=? (item-name item) "Sulfuras, Hand of Ragnaros"))
|
||||||
|
(item-quality-set! item (- (item-quality item) 1))))
|
||||||
|
(item-quality-set! item (- (item-quality item) (item-quality item))))
|
||||||
|
(if (< (item-quality item) 50)
|
||||||
|
(item-quality-set! item (+ (item-quality item) 1))))))
|
||||||
|
items))
|
||||||
32
scheme/texttest-fixture.scm
Normal file
32
scheme/texttest-fixture.scm
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
(include "gilded-rose.scm")
|
||||||
|
|
||||||
|
(display "OMGHAI!")
|
||||||
|
(newline)
|
||||||
|
|
||||||
|
(let ((items (list (make-item "+5 Dexterity Vest" 10 20)
|
||||||
|
(make-item "Aged Brie" 2 0)
|
||||||
|
(make-item "Elixir of the Mongoose" 5 7)
|
||||||
|
(make-item "Sulfuras, Hand of Ragnaros" 0 80)
|
||||||
|
(make-item "Sulfuras, Hand of Ragnaros" -1 80)
|
||||||
|
(make-item "Backstage passes to a TAFKAL80ETC concert" 15 20)
|
||||||
|
(make-item "Backstage passes to a TAFKAL80ETC concert" 10 49)
|
||||||
|
(make-item "Backstage passes to a TAFKAL80ETC concert" 5 49)
|
||||||
|
;; this conjured item does not work properly yet
|
||||||
|
(make-item "Conjured Mana Cake" 3 6)))
|
||||||
|
(days 2))
|
||||||
|
|
||||||
|
(define (loop day)
|
||||||
|
(cond ((< day days)
|
||||||
|
(display (string-append "-------- day " (number->string day) " --------"))
|
||||||
|
(newline)
|
||||||
|
(display "name, sell-in, quality")
|
||||||
|
(newline)
|
||||||
|
(for-each
|
||||||
|
(lambda (item)
|
||||||
|
(display (item-to-string item))
|
||||||
|
(newline))
|
||||||
|
items)
|
||||||
|
(newline)
|
||||||
|
(update-quality items)
|
||||||
|
(loop (+ day 1)))))
|
||||||
|
(loop 0))
|
||||||
Loading…
Reference in New Issue
Block a user