Procházet zdrojové kódy

- fixes issue #522
- adds Array>>removeIndex:
- adds unit tests for the above

Nicolas Petton před 11 roky
rodič
revize
72f7c79347

+ 12 - 1
js/Kernel-Collections.deploy.js

@@ -2165,11 +2165,22 @@ selector: "removeFrom:to:",
 fn: function (aNumber,anotherNumber){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-self.splice(aNumber - 1,anotherNumber - 1);
+self.splice(aNumber -1, anotherNumber - aNumber + 1);
 return self}, function($ctx1) {$ctx1.fill(self,"removeFrom:to:",{aNumber:aNumber,anotherNumber:anotherNumber},smalltalk.Array)})},
 messageSends: []}),
 smalltalk.Array);
 
+smalltalk.addMethod(
+smalltalk.method({
+selector: "removeIndex:",
+fn: function (anInteger){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
+self.splice(anInteger - 1, 1);
+return self}, function($ctx1) {$ctx1.fill(self,"removeIndex:",{anInteger:anInteger},smalltalk.Array)})},
+messageSends: []}),
+smalltalk.Array);
+
 smalltalk.addMethod(
 smalltalk.method({
 selector: "reversed",

+ 22 - 6
js/Kernel-Collections.js

@@ -2139,7 +2139,7 @@ smalltalk.SequenceableCollection);
 smalltalk.addMethod(
 smalltalk.method({
 selector: "addLast:",
-category: 'adding',
+category: 'adding/removing',
 fn: function (anObject){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
@@ -2504,7 +2504,7 @@ smalltalk.SequenceableCollection);
 smalltalk.addMethod(
 smalltalk.method({
 selector: "removeLast",
-category: 'adding',
+category: 'adding/removing',
 fn: function (){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
@@ -2883,10 +2883,26 @@ category: 'adding/removing',
 fn: function (aNumber,anotherNumber){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
-self.splice(aNumber - 1,anotherNumber - 1);
+self.splice(aNumber -1, anotherNumber - aNumber + 1);
 return self}, function($ctx1) {$ctx1.fill(self,"removeFrom:to:",{aNumber:aNumber,anotherNumber:anotherNumber},smalltalk.Array)})},
 args: ["aNumber", "anotherNumber"],
-source: "removeFrom: aNumber to: anotherNumber\x0a\x09<self.splice(aNumber - 1,anotherNumber - 1)>",
+source: "removeFrom: aNumber to: anotherNumber\x0a\x09<self.splice(aNumber -1, anotherNumber - aNumber + 1)>",
+messageSends: [],
+referencedClasses: []
+}),
+smalltalk.Array);
+
+smalltalk.addMethod(
+smalltalk.method({
+selector: "removeIndex:",
+category: 'adding/removing',
+fn: function (anInteger){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
+self.splice(anInteger - 1, 1);
+return self}, function($ctx1) {$ctx1.fill(self,"removeIndex:",{anInteger:anInteger},smalltalk.Array)})},
+args: ["anInteger"],
+source: "removeIndex: anInteger\x0a\x09<self.splice(anInteger - 1, 1)>",
 messageSends: [],
 referencedClasses: []
 }),
@@ -3132,7 +3148,7 @@ smalltalk.CharacterArray);
 smalltalk.addMethod(
 smalltalk.method({
 selector: "add:",
-category: 'adding',
+category: 'adding/removing',
 fn: function (anObject){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 
@@ -3302,7 +3318,7 @@ smalltalk.CharacterArray);
 smalltalk.addMethod(
 smalltalk.method({
 selector: "remove:",
-category: 'adding',
+category: 'adding/removing',
 fn: function (anObject){
 var self=this;
 return smalltalk.withContext(function($ctx1) { 

+ 26 - 0
js/Kernel-Tests.deploy.js

@@ -1657,6 +1657,32 @@ return self}, function($ctx1) {$ctx1.fill(self,"testPrintString",{array:array},s
 messageSends: ["new", "assert:equals:", "printString", "add:", "remove:", "addLast:"]}),
 smalltalk.ArrayTest);
 
+smalltalk.addMethod(
+smalltalk.method({
+selector: "testRemoveFromTo",
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
+self._assert_equals_([(1), (2), (3), (4)]._removeFrom_to_((1),(3)),[(4)]);
+self._assert_equals_([(1), (2), (3), (4)]._removeFrom_to_((2),(3)),[(1), (4)]);
+self._assert_equals_([(1), (2), (3), (4)]._removeFrom_to_((2),(4)),[(1)]);
+return self}, function($ctx1) {$ctx1.fill(self,"testRemoveFromTo",{},smalltalk.ArrayTest)})},
+messageSends: ["assert:equals:", "removeFrom:to:"]}),
+smalltalk.ArrayTest);
+
+smalltalk.addMethod(
+smalltalk.method({
+selector: "testRemoveIndex",
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
+self._assert_equals_([(1), (2), (3), (4)]._removeIndex_((2)),[(1), (3), (4)]);
+self._assert_equals_([(1), (2), (3), (4)]._removeIndex_((1)),[(2), (3), (4)]);
+self._assert_equals_(["hello"]._removeIndex_((1)),[]);
+return self}, function($ctx1) {$ctx1.fill(self,"testRemoveIndex",{},smalltalk.ArrayTest)})},
+messageSends: ["assert:equals:", "removeIndex:"]}),
+smalltalk.ArrayTest);
+
 
 smalltalk.addMethod(
 smalltalk.method({

+ 36 - 0
js/Kernel-Tests.js

@@ -2057,6 +2057,42 @@ referencedClasses: ["Array"]
 }),
 smalltalk.ArrayTest);
 
+smalltalk.addMethod(
+smalltalk.method({
+selector: "testRemoveFromTo",
+category: 'tests',
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
+self._assert_equals_([(1), (2), (3), (4)]._removeFrom_to_((1),(3)),[(4)]);
+self._assert_equals_([(1), (2), (3), (4)]._removeFrom_to_((2),(3)),[(1), (4)]);
+self._assert_equals_([(1), (2), (3), (4)]._removeFrom_to_((2),(4)),[(1)]);
+return self}, function($ctx1) {$ctx1.fill(self,"testRemoveFromTo",{},smalltalk.ArrayTest)})},
+args: [],
+source: "testRemoveFromTo\x0a\x09\x0a\x09self assert: (#(1 2 3 4) removeFrom: 1 to: 3) equals: #(4).\x0a\x09self assert: (#(1 2 3 4) removeFrom: 2 to: 3) equals: #(1 4).\x0a\x09self assert: (#(1 2 3 4) removeFrom: 2 to: 4) equals: #(1)",
+messageSends: ["assert:equals:", "removeFrom:to:"],
+referencedClasses: []
+}),
+smalltalk.ArrayTest);
+
+smalltalk.addMethod(
+smalltalk.method({
+selector: "testRemoveIndex",
+category: 'tests',
+fn: function (){
+var self=this;
+return smalltalk.withContext(function($ctx1) { 
+self._assert_equals_([(1), (2), (3), (4)]._removeIndex_((2)),[(1), (3), (4)]);
+self._assert_equals_([(1), (2), (3), (4)]._removeIndex_((1)),[(2), (3), (4)]);
+self._assert_equals_(["hello"]._removeIndex_((1)),[]);
+return self}, function($ctx1) {$ctx1.fill(self,"testRemoveIndex",{},smalltalk.ArrayTest)})},
+args: [],
+source: "testRemoveIndex\x0a\x09\x0a\x09self assert: (#(1 2 3 4) removeIndex: 2) equals: #(1 3 4).\x0a\x09self assert: (#(1 2 3 4) removeIndex: 1) equals: #(2 3 4).\x0a\x09self assert: (#('hello') removeIndex: 1) equals: #()",
+messageSends: ["assert:equals:", "removeIndex:"],
+referencedClasses: []
+}),
+smalltalk.ArrayTest);
+
 
 smalltalk.addMethod(
 smalltalk.method({

+ 7 - 3
st/Kernel-Collections.st

@@ -794,7 +794,7 @@ third
 	^self at: 3
 ! !
 
-!SequenceableCollection methodsFor: 'adding'!
+!SequenceableCollection methodsFor: 'adding/removing'!
 
 addLast: anObject
 	self add: anObject
@@ -972,7 +972,11 @@ remove: anObject ifAbsent: aBlock
 !
 
 removeFrom: aNumber to: anotherNumber
-	<self.splice(aNumber - 1,anotherNumber - 1)>
+	<self.splice(aNumber -1, anotherNumber - aNumber + 1)>
+!
+
+removeIndex: anInteger
+	<self.splice(anInteger - 1, 1)>
 ! !
 
 !Array methodsFor: 'converting'!
@@ -1072,7 +1076,7 @@ at: anIndex put: anObject
 	self errorReadOnly
 ! !
 
-!CharacterArray methodsFor: 'adding'!
+!CharacterArray methodsFor: 'adding/removing'!
 
 add: anObject
 	self errorReadOnly

+ 14 - 0
st/Kernel-Tests.st

@@ -793,6 +793,20 @@ testPrintString
 	self assert: array printString equals: 'an Array (''foo'' 3)'.
 	array addLast: 3.
 	self assert: array printString equals: 'an Array (''foo'' 3 3)'.
+!
+
+testRemoveFromTo
+	
+	self assert: (#(1 2 3 4) removeFrom: 1 to: 3) equals: #(4).
+	self assert: (#(1 2 3 4) removeFrom: 2 to: 3) equals: #(1 4).
+	self assert: (#(1 2 3 4) removeFrom: 2 to: 4) equals: #(1)
+!
+
+testRemoveIndex
+	
+	self assert: (#(1 2 3 4) removeIndex: 2) equals: #(1 3 4).
+	self assert: (#(1 2 3 4) removeIndex: 1) equals: #(2 3 4).
+	self assert: (#('hello') removeIndex: 1) equals: #()
 ! !
 
 !ArrayTest class methodsFor: 'accessing'!