| package main |
| |
| import ( |
| "fmt" |
| "reflect" |
| "testing" |
| "time" |
| ) |
| |
| func generateInput(inputLen int) []string { |
| var input []string |
| for i := 0; i < inputLen; i++ { |
| input = append(input, fmt.Sprintf("s%d", i)) |
| } |
| |
| return input |
| } |
| |
| func testChunkStrings(t *testing.T, inputLen, numChunks int) { |
| t.Logf("inputLen=%d, numChunks=%d", inputLen, numChunks) |
| input := generateInput(inputLen) |
| result := chunkStrings(input, numChunks) |
| t.Logf("result has %d chunks", len(result)) |
| var inputReconstructedFromResult []string |
| for i, chunk := range result { |
| t.Logf("chunk %d has %d elements", i, len(chunk)) |
| inputReconstructedFromResult = append(inputReconstructedFromResult, chunk...) |
| } |
| if !reflect.DeepEqual(input, inputReconstructedFromResult) { |
| t.Fatal("input != inputReconstructedFromResult") |
| } |
| } |
| |
| func TestChunkStrings_4_4(t *testing.T) { |
| testChunkStrings(t, 4, 4) |
| } |
| |
| func TestChunkStrings_4_1(t *testing.T) { |
| testChunkStrings(t, 4, 1) |
| } |
| |
| func TestChunkStrings_1_4(t *testing.T) { |
| testChunkStrings(t, 1, 4) |
| } |
| |
| func TestChunkStrings_1000_8(t *testing.T) { |
| testChunkStrings(t, 1000, 8) |
| } |
| |
| func TestChunkStrings_1000_9(t *testing.T) { |
| testChunkStrings(t, 1000, 9) |
| } |
| |
| func testShuffleStrings(t *testing.T, inputLen int, seed int64) { |
| t.Logf("inputLen=%d, seed=%d", inputLen, seed) |
| x := generateInput(inputLen) |
| shuffleStrings(x, seed) |
| t.Logf("shuffled: %v", x) |
| } |
| |
| func TestShuffleStrings_100(t *testing.T) { |
| testShuffleStrings(t, 100, time.Now().UnixNano()) |
| } |