fix: having mark and same raised gesture
previously didn't check everyone, and person with mark and gesture is last in the circle
This commit is contained in:
		
							parent
							
								
									017cf465da
								
							
						
					
					
						commit
						077537a1e3
					
				| @ -129,7 +129,7 @@ func (r *Room) PersonToStandUpFromTable(p PersonId) { | |||||||
| //   - if the gesture is of lover priority and there is a mark for the gesture level | //   - if the gesture is of lover priority and there is a mark for the gesture level | ||||||
| //     should be counted from the mark | //     should be counted from the mark | ||||||
| func (r *Room) NextSpeakerIndex() (nextSpeakerIndex int, found bool, countedFromIndex int) { | func (r *Room) NextSpeakerIndex() (nextSpeakerIndex int, found bool, countedFromIndex int) { | ||||||
| 	// if a current speaker - after removing the hand, we need to find next speaker | 	// if a current speaker - before removing the hand, we need to find next speaker | ||||||
| 	// from highest hand gesture to lowest, until one is found | 	// from highest hand gesture to lowest, until one is found | ||||||
| 
 | 
 | ||||||
| 	currentSpeakerGesture, currentSpeakerFound := r.ParticipantHands[r.CurrentSpeaker] | 	currentSpeakerGesture, currentSpeakerFound := r.ParticipantHands[r.CurrentSpeaker] | ||||||
| @ -143,9 +143,14 @@ gestureIteration: | |||||||
| 		log.Printf("searching for gesture %s", gesture.String()) | 		log.Printf("searching for gesture %s", gesture.String()) | ||||||
| 		startIndex := r.gestureSearchStartIndex(gesture, currentSpeakerGesture) | 		startIndex := r.gestureSearchStartIndex(gesture, currentSpeakerGesture) | ||||||
| 		participantsCount := len(r.Paricipants) | 		participantsCount := len(r.Paricipants) | ||||||
| 		for i := 1; i < participantsCount; i++ { | 	inGestureParticipantIteration: | ||||||
|  | 		for i := 1; i <= participantsCount; i++ { | ||||||
| 			checkIndex := (startIndex + i) % participantsCount | 			checkIndex := (startIndex + i) % participantsCount | ||||||
| 			checkPerson := r.Paricipants[checkIndex] | 			checkPerson := r.Paricipants[checkIndex] | ||||||
|  | 			if checkPerson == r.CurrentSpeaker { | ||||||
|  | 				// current speaker still has thair gesture up | ||||||
|  | 				continue inGestureParticipantIteration | ||||||
|  | 			} | ||||||
| 			checkGesture, isFound := r.ParticipantHands[checkPerson] | 			checkGesture, isFound := r.ParticipantHands[checkPerson] | ||||||
| 			if isFound && checkGesture == gesture { | 			if isFound && checkGesture == gesture { | ||||||
| 				nextSpeakerIndex = slices.Index(r.Paricipants, checkPerson) | 				nextSpeakerIndex = slices.Index(r.Paricipants, checkPerson) | ||||||
| @ -188,8 +193,8 @@ func (r *Room) gestureSearchStartIndex(gesture, curSpeakerGesture HandGesture) i | |||||||
| 		} | 		} | ||||||
| 		// if no mark found - count from the speaker | 		// if no mark found - count from the speaker | ||||||
| 	} | 	} | ||||||
| 	log.Printf("> selecting person from which to start. cur speaker %s, for gestrue %s, got person %d", | 	log.Printf("> selecting person from which to start. cur speaker %d with gesture %s, for gestrue %s, got person %d", | ||||||
| 		curSpeakerGesture.String(), gesture.String(), personFromWhichToStartSearch) | 		r.CurrentSpeaker, curSpeakerGesture.String(), gesture.String(), personFromWhichToStartSearch) | ||||||
| 
 | 
 | ||||||
| 	indexFromWhichToStart := slices.Index(r.Paricipants, personFromWhichToStartSearch) | 	indexFromWhichToStart := slices.Index(r.Paricipants, personFromWhichToStartSearch) | ||||||
| 	return indexFromWhichToStart | 	return indexFromWhichToStart | ||||||
|  | |||||||
| @ -18,11 +18,12 @@ var releaseHandTests = []releaseHandTest{ | |||||||
| 	selectNextHigherLevel, | 	selectNextHigherLevel, | ||||||
| 	usingMarkToLoverLevel, | 	usingMarkToLoverLevel, | ||||||
| 	releasingNonSpeakerHand, | 	releasingNonSpeakerHand, | ||||||
|  | 	releaseToPersonWithHandAndMark, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func TestRoomReleaseHand(t *testing.T) { | func TestRoomReleaseHand(t *testing.T) { | ||||||
| 	for _, test := range releaseHandTests { | 	for _, test := range releaseHandTests { | ||||||
| 		t.Run(test.testName, func(t *testing.T){ | 		t.Run(test.testName, func(t *testing.T) { | ||||||
| 			test.room.InitMaps() | 			test.room.InitMaps() | ||||||
| 			test.expected.InitMaps() | 			test.expected.InitMaps() | ||||||
| 			if test.room.ReleaseHand(test.releasingParticipantId); !test.room.Equal(&test.expected) { | 			if test.room.ReleaseHand(test.releasingParticipantId); !test.room.Equal(&test.expected) { | ||||||
| @ -139,8 +140,7 @@ var selectNextHigherLevel releaseHandTest = releaseHandTest{ | |||||||
| 			person2.Id: Expand, | 			person2.Id: Expand, | ||||||
| 			person3.Id: Meta, | 			person3.Id: Meta, | ||||||
| 		}, | 		}, | ||||||
| 		Marks: map[HandGesture]PersonId{ | 		Marks: map[HandGesture]PersonId{}, | ||||||
| 		}, |  | ||||||
| 	}, | 	}, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -180,8 +180,7 @@ var usingMarkToLoverLevel releaseHandTest = releaseHandTest{ | |||||||
| 			person2.Id: Expand, | 			person2.Id: Expand, | ||||||
| 			person4.Id: Expand, | 			person4.Id: Expand, | ||||||
| 		}, | 		}, | ||||||
| 		Marks: map[HandGesture]PersonId{ | 		Marks: map[HandGesture]PersonId{}, | ||||||
| 		}, |  | ||||||
| 	}, | 	}, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -227,3 +226,42 @@ var releasingNonSpeakerHand releaseHandTest = releaseHandTest{ | |||||||
| 		}, | 		}, | ||||||
| 	}, | 	}, | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | // there is a mark for Expand on person 2, and raised hand with Expand on person 2 | ||||||
|  | // speaker is person 3 with Meta | ||||||
|  | // after hand release person 2 should be speaking, with mark removed | ||||||
|  | var releaseToPersonWithHandAndMark releaseHandTest = releaseHandTest{ | ||||||
|  | 	testName: "releaseToPersonWithHandAndMark", | ||||||
|  | 	room: Room{ | ||||||
|  | 		Name:           "test", | ||||||
|  | 		CurrentSpeaker: person3.Id, | ||||||
|  | 		Paricipants: []PersonId{ | ||||||
|  | 			person1.Id, | ||||||
|  | 			person2.Id, | ||||||
|  | 			person3.Id, | ||||||
|  | 			person4.Id, | ||||||
|  | 		}, | ||||||
|  | 		ParticipantHands: map[PersonId]HandGesture{ | ||||||
|  | 			person2.Id: Expand, | ||||||
|  | 			person3.Id: Meta, | ||||||
|  | 		}, | ||||||
|  | 		Marks: map[HandGesture]PersonId{ | ||||||
|  | 			Expand: person2.Id, | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | 	releasingParticipantId: person3.Id, | ||||||
|  | 	expected: Room{ | ||||||
|  | 		Name:           "test", | ||||||
|  | 		CurrentSpeaker: person2.Id, | ||||||
|  | 		Paricipants: []PersonId{ | ||||||
|  | 			person1.Id, | ||||||
|  | 			person2.Id, | ||||||
|  | 			person3.Id, | ||||||
|  | 			person4.Id, | ||||||
|  | 		}, | ||||||
|  | 		ParticipantHands: map[PersonId]HandGesture{ | ||||||
|  | 			person2.Id: Expand, | ||||||
|  | 		}, | ||||||
|  | 		Marks: map[HandGesture]PersonId{}, | ||||||
|  | 	}, | ||||||
|  | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user