Skip to content

Commit 0d8f559

Browse files
committed
Add ImagenModel.imageGenerationParameters() tests
1 parent 24da495 commit 0d8f559

File tree

1 file changed

+169
-0
lines changed

1 file changed

+169
-0
lines changed

FirebaseVertexAI/Tests/Unit/Types/Imagen/ImageGenerationParametersTests.swift

Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,175 @@ final class ImageGenerationParametersTests: XCTestCase {
2424
encoder.outputFormatting = [.sortedKeys, .prettyPrinted, .withoutEscapingSlashes]
2525
}
2626

27+
func testDefaultParameters_noneSpecified() throws {
28+
let expectedParameters = ImageGenerationParameters(
29+
sampleCount: 1,
30+
storageURI: nil,
31+
negativePrompt: nil,
32+
aspectRatio: nil,
33+
safetyFilterLevel: nil,
34+
personGeneration: nil,
35+
outputOptions: nil,
36+
addWatermark: nil,
37+
includeResponsibleAIFilterReason: true
38+
)
39+
40+
let parameters = ImagenModel.imageGenerationParameters(
41+
storageURI: nil,
42+
generationConfig: nil,
43+
safetySettings: nil
44+
)
45+
46+
XCTAssertEqual(parameters, expectedParameters)
47+
}
48+
49+
func testDefaultParameters_includeStorageURI() throws {
50+
let storageURI = "gs://test-bucket/path"
51+
let expectedParameters = ImageGenerationParameters(
52+
sampleCount: 1,
53+
storageURI: storageURI,
54+
negativePrompt: nil,
55+
aspectRatio: nil,
56+
safetyFilterLevel: nil,
57+
personGeneration: nil,
58+
outputOptions: nil,
59+
addWatermark: nil,
60+
includeResponsibleAIFilterReason: true
61+
)
62+
63+
let parameters = ImagenModel.imageGenerationParameters(
64+
storageURI: storageURI,
65+
generationConfig: nil,
66+
safetySettings: nil
67+
)
68+
69+
XCTAssertEqual(parameters, expectedParameters)
70+
}
71+
72+
func testParameters_includeGenerationConfig() throws {
73+
let sampleCount = 2
74+
let negativePrompt = "test-negative-prompt"
75+
let aspectRatio = ImagenAspectRatio.landscape16x9
76+
let compressionQuality = 80
77+
let imageFormat = ImagenImageFormat.jpeg(compressionQuality: compressionQuality)
78+
let addWatermark = true
79+
let generationConfig = ImagenGenerationConfig(
80+
numberOfImages: sampleCount,
81+
negativePrompt: negativePrompt,
82+
aspectRatio: aspectRatio,
83+
imageFormat: imageFormat,
84+
addWatermark: addWatermark
85+
)
86+
let expectedParameters = ImageGenerationParameters(
87+
sampleCount: sampleCount,
88+
storageURI: nil,
89+
negativePrompt: negativePrompt,
90+
aspectRatio: aspectRatio.rawValue,
91+
safetyFilterLevel: nil,
92+
personGeneration: nil,
93+
outputOptions: ImageGenerationOutputOptions(
94+
mimeType: imageFormat.mimeType,
95+
compressionQuality: imageFormat.compressionQuality
96+
),
97+
addWatermark: addWatermark,
98+
includeResponsibleAIFilterReason: true
99+
)
100+
101+
let parameters = ImagenModel.imageGenerationParameters(
102+
storageURI: nil,
103+
generationConfig: generationConfig,
104+
safetySettings: nil
105+
)
106+
107+
XCTAssertEqual(parameters, expectedParameters)
108+
XCTAssertEqual(parameters.aspectRatio, "16:9")
109+
XCTAssertEqual(parameters.outputOptions?.mimeType, "image/jpeg")
110+
XCTAssertEqual(parameters.outputOptions?.compressionQuality, compressionQuality)
111+
}
112+
113+
func testDefaultParameters_includeSafetySettings() throws {
114+
let safetyFilterLevel = ImagenSafetySettings.SafetyFilterLevel.blockOnlyHigh
115+
let personGeneration = ImagenSafetySettings.PersonGeneration.allowAll
116+
let includeFilterReason = false
117+
let safetySettings = ImagenSafetySettings(
118+
safetyFilterLevel: safetyFilterLevel,
119+
includeFilterReason: includeFilterReason,
120+
personGeneration: personGeneration
121+
)
122+
let expectedParameters = ImageGenerationParameters(
123+
sampleCount: 1,
124+
storageURI: nil,
125+
negativePrompt: nil,
126+
aspectRatio: nil,
127+
safetyFilterLevel: safetyFilterLevel.rawValue,
128+
personGeneration: personGeneration.rawValue,
129+
outputOptions: nil,
130+
addWatermark: nil,
131+
includeResponsibleAIFilterReason: includeFilterReason
132+
)
133+
134+
let parameters = ImagenModel.imageGenerationParameters(
135+
storageURI: nil,
136+
generationConfig: nil,
137+
safetySettings: safetySettings
138+
)
139+
140+
XCTAssertEqual(parameters, expectedParameters)
141+
XCTAssertEqual(parameters.safetyFilterLevel, "block_only_high")
142+
XCTAssertEqual(parameters.personGeneration, "allow_all")
143+
}
144+
145+
func testParameters_includeAll() throws {
146+
let storageURI = "gs://test-bucket/path"
147+
let sampleCount = 4
148+
let negativePrompt = "test-negative-prompt"
149+
let aspectRatio = ImagenAspectRatio.portrait3x4
150+
let imageFormat = ImagenImageFormat.png()
151+
let addWatermark = false
152+
let generationConfig = ImagenGenerationConfig(
153+
numberOfImages: sampleCount,
154+
negativePrompt: negativePrompt,
155+
aspectRatio: aspectRatio,
156+
imageFormat: imageFormat,
157+
addWatermark: addWatermark
158+
)
159+
let safetyFilterLevel = ImagenSafetySettings.SafetyFilterLevel.blockNone
160+
let personGeneration = ImagenSafetySettings.PersonGeneration.blockAll
161+
let includeFilterReason = false
162+
let safetySettings = ImagenSafetySettings(
163+
safetyFilterLevel: safetyFilterLevel,
164+
includeFilterReason: includeFilterReason,
165+
personGeneration: personGeneration
166+
)
167+
let expectedParameters = ImageGenerationParameters(
168+
sampleCount: sampleCount,
169+
storageURI: storageURI,
170+
negativePrompt: negativePrompt,
171+
aspectRatio: aspectRatio.rawValue,
172+
safetyFilterLevel: safetyFilterLevel.rawValue,
173+
personGeneration: personGeneration.rawValue,
174+
outputOptions: ImageGenerationOutputOptions(
175+
mimeType: imageFormat.mimeType,
176+
compressionQuality: imageFormat.compressionQuality
177+
),
178+
addWatermark: addWatermark,
179+
includeResponsibleAIFilterReason: includeFilterReason
180+
)
181+
182+
let parameters = ImagenModel.imageGenerationParameters(
183+
storageURI: storageURI,
184+
generationConfig: generationConfig,
185+
safetySettings: safetySettings
186+
)
187+
188+
XCTAssertEqual(parameters, expectedParameters)
189+
XCTAssertEqual(parameters.aspectRatio, "3:4")
190+
XCTAssertEqual(parameters.safetyFilterLevel, "block_none")
191+
XCTAssertEqual(parameters.personGeneration, "dont_allow")
192+
XCTAssertEqual(parameters.outputOptions?.mimeType, "image/png")
193+
XCTAssertNil(parameters.outputOptions?.compressionQuality)
194+
}
195+
27196
// MARK: - Encoding Tests
28197

29198
func testEncodeParameters_allSpecified() throws {

0 commit comments

Comments
 (0)