@@ -154,6 +154,49 @@ TEST(TestSizes, CheckSolovevNoAxis) {
154154 EXPECT_EQ (sizes.mnmax , 6 );
155155} // CheckSolovevNoAxis
156156
157+ TEST (TestSizes, CheckSolovevFreeBdy) {
158+ double tolerance = 1.0e-30 ;
159+
160+ absl::StatusOr<std::string> indata_json =
161+ ReadFile (" vmecpp/test_data/solovev_free_bdy.json" );
162+ ASSERT_TRUE (indata_json.ok ());
163+
164+ absl::StatusOr<VmecINDATA> vmec_indata = VmecINDATA::FromJson (*indata_json);
165+ ASSERT_TRUE (vmec_indata.ok ());
166+
167+ Sizes sizes (*vmec_indata);
168+
169+ EXPECT_EQ (sizes.lasym , false );
170+ EXPECT_EQ (sizes.nfp , 1 );
171+ EXPECT_EQ (sizes.mpol , 6 );
172+ EXPECT_EQ (sizes.ntor , 0 );
173+
174+ // ntheta was 0 in the input file, so compute it here
175+ EXPECT_EQ (sizes.ntheta , 2 * sizes.mpol + 6 );
176+ EXPECT_EQ (sizes.nZeta , 1 );
177+
178+ EXPECT_EQ (sizes.lthreed , false );
179+ EXPECT_EQ (sizes.num_basis , 1 );
180+
181+ EXPECT_EQ (sizes.nThetaEven , 18 );
182+ EXPECT_EQ (sizes.nThetaReduced , 10 );
183+ EXPECT_EQ (sizes.nThetaEff , 10 );
184+
185+ EXPECT_EQ (sizes.nZnT , 10 );
186+
187+ for (int l = 0 ; l < sizes.nThetaEff ; ++l) {
188+ if (l == 0 || l == sizes.nThetaEff - 1 ) {
189+ EXPECT_TRUE (IsCloseRelAbs (1.0 / 18 , sizes.wInt [l], tolerance));
190+ } else {
191+ EXPECT_TRUE (IsCloseRelAbs (2.0 / 18 , sizes.wInt [l], tolerance));
192+ }
193+ }
194+
195+ EXPECT_EQ (sizes.mnsize , 6 );
196+
197+ EXPECT_EQ (sizes.mnmax , 6 );
198+ } // CheckSolovevFreeBdy
199+
157200TEST (TestSizes, CheckCthLikeFixedBoundary) {
158201 double tolerance = 1.0e-30 ;
159202
0 commit comments