How to use assertGreaterEqual method in autotest

Best Python code snippet using autotest_python

Tests.py

Source:Tests.py Github

copy

Full Screen

...12 self.true2 = torch.normal(0, 1.0, (2*n, d))13 self.pred1pt = torch.normal(0,1.0,(1,d))14 def test_ddks(self):15 xdks = ddks.methods.ddKS()16 self.assertGreaterEqual(1.0, xdks(self.pred,self.true))17 def test_vdks(self):18 xdks = ddks.methods.vdKS()19 self.assertGreaterEqual(1.0, xdks(self.pred,self.true))20 def test_rdks(self):21 xdks = ddks.methods.rdKS()22 self.assertGreaterEqual(1.0, xdks(self.pred, self.true))23 def test_ddks_diffpt(self):24 xdks = ddks.methods.ddKS()25 self.assertGreaterEqual(1.0, xdks(self.pred,self.true2))26 def test_vdks_diffpt(self):27 xdks = ddks.methods.vdKS()28 self.assertGreaterEqual(1.0, xdks(self.pred,self.true2))29 def test_rdks_diffpt(self):30 xdks = ddks.methods.rdKS()31 self.assertGreaterEqual(1.0, xdks(self.pred, self.true2))32 def test_ddks_onept(self):33 xdks = ddks.methods.ddKS()34 self.assertGreaterEqual(1.0, xdks(self.pred1pt, self.true))35 def test_vdks_onept(self):36 xdks = ddks.methods.vdKS()37 self.assertGreaterEqual(1.0, xdks(self.pred1pt, self.true))38 def test_rdks_onept(self):39 xdks = ddks.methods.rdKS()40 self.assertGreaterEqual(1.0, xdks(self.pred1pt, self.true))41 def test_ddks_diffptrev(self):42 xdks = ddks.methods.ddKS()43 self.assertGreaterEqual(1.0, xdks(self.true2,self.pred))44 def test_vdks_diffptrev(self):45 xdks = ddks.methods.vdKS()46 self.assertGreaterEqual(1.0, xdks(self.true2,self.pred))47 def test_rdks_diffptrev(self):48 xdks = ddks.methods.rdKS()49 self.assertGreaterEqual(1.0, xdks(self.true2, self.pred))50 def test_ddks_oneptrev(self):51 xdks = ddks.methods.ddKS()52 self.assertGreaterEqual(1.0, xdks(self.true,self.pred1pt))53 def test_vdks_oneptrev(self):54 xdks = ddks.methods.vdKS()55 self.assertGreaterEqual(1.0, xdks(self.true,self.pred1pt))56 def test_rdks_oneptrev(self):57 xdks = ddks.methods.rdKS()58 self.assertGreaterEqual(1.0, xdks(self.true,self.pred1pt))59 def test_permute_d_diff(self):60 xdks = ddks.methods.ddKS()61 p, _, _ = xdks.permute(pred=self.pred, true=self.true2, J=100)62 self.assertGreaterEqual(1.0, p)63 def test_permute_v_diff(self):64 xdks = ddks.methods.vdKS()65 p, _, _ = xdks.permute(pred=self.pred, true=self.true2, J=100)66 self.assertGreaterEqual(1.0, p)67 def test_permute_r_diff(self):68 xdks = ddks.methods.rdKS()69 p, _, _ = xdks.permute(pred=self.pred, true=self.true2, J=100)70 self.assertGreaterEqual(1.0, p)71 def test_permute_d_1pt(self):72 xdks = ddks.methods.ddKS()73 p, _, _ = xdks.permute(pred=self.pred1pt, true=self.true, J=100)74 self.assertGreaterEqual(1.0, p)75 def test_permute_v_1pt(self):76 xdks = ddks.methods.vdKS()77 p, _, _ = xdks.permute(pred=self.pred1pt, true=self.true, J=100)78 self.assertGreaterEqual(1.0, p)79 def test_permute_r_1pt(self):80 xdks = ddks.methods.rdKS()81 p, _, _ = xdks.permute(pred=self.pred1pt, true=self.true, J=100)82 self.assertGreaterEqual(1.0, p)83class MethodTests2D(unittest.TestCase):84 def setUp(self) -> None:85 d = 286 n = 1087 self.pred = torch.normal(0,1.0,(n,d))88 self.true = torch.normal(0, 1.0, (n, d))89 self.true2 = torch.normal(0, 1.0, (2 * n, d))90 self.pred1pt = torch.normal(0, 1.0, (1, d))91 def test_ddks(self):92 xdks = ddks.methods.ddKS()93 self.assertGreaterEqual(1.0, xdks(self.pred,self.true))94 def test_vdks(self):95 xdks = ddks.methods.vdKS()96 self.assertGreaterEqual(1.0, xdks(self.pred,self.true))97 def test_rdks(self):98 xdks = ddks.methods.rdKS()99 self.assertGreaterEqual(1.0, xdks(self.pred, self.true))100 def test_ddks_diffpt(self):101 xdks = ddks.methods.ddKS()102 self.assertGreaterEqual(1.0, xdks(self.pred,self.true2))103 def test_vdks_diffpt(self):104 xdks = ddks.methods.vdKS()105 self.assertGreaterEqual(1.0, xdks(self.pred,self.true2))106 def test_rdks_diffpt(self):107 xdks = ddks.methods.rdKS()108 self.assertGreaterEqual(1.0, xdks(self.pred, self.true2))109 def test_ddks_onept(self):110 xdks = ddks.methods.ddKS()111 self.assertGreaterEqual(1.0, xdks(self.pred1pt, self.true))112 def test_vdks_onept(self):113 xdks = ddks.methods.vdKS()114 self.assertGreaterEqual(1.0, xdks(self.pred1pt, self.true))115 def test_rdks_onept(self):116 xdks = ddks.methods.rdKS()117 self.assertGreaterEqual(1.0, xdks(self.pred1pt, self.true))118 def test_ddks_diffptrev(self):119 xdks = ddks.methods.ddKS()120 self.assertGreaterEqual(1.0, xdks(self.true2,self.pred))121 def test_vdks_diffptrev(self):122 xdks = ddks.methods.vdKS()123 self.assertGreaterEqual(1.0, xdks(self.true2,self.pred))124 def test_rdks_diffptrev(self):125 xdks = ddks.methods.rdKS()126 self.assertGreaterEqual(1.0, xdks(self.true2, self.pred))127 def test_ddks_oneptrev(self):128 xdks = ddks.methods.ddKS()129 self.assertGreaterEqual(1.0, xdks(self.true,self.pred1pt))130 def test_vdks_oneptrev(self):131 xdks = ddks.methods.vdKS()132 self.assertGreaterEqual(1.0, xdks(self.true,self.pred1pt))133 def test_rdks_oneptrev(self):134 xdks = ddks.methods.rdKS()135 self.assertGreaterEqual(1.0, xdks(self.true,self.pred1pt))136 def test_permute_d_diff(self):137 xdks = ddks.methods.ddKS()138 p,_,_= xdks.permute(pred=self.pred, true=self.true2,J=100)139 self.assertGreaterEqual(1.0, p)140 def test_permute_v_diff(self):141 xdks = ddks.methods.vdKS()142 p,_,_= xdks.permute(pred=self.pred, true=self.true2,J=100)143 self.assertGreaterEqual(1.0, p)144 def test_permute_r_diff(self):145 xdks = ddks.methods.rdKS()146 p,_,_= xdks.permute(pred=self.pred, true=self.true2,J=100)147 self.assertGreaterEqual(1.0, p)148 def test_permute_d_1pt(self):149 xdks = ddks.methods.ddKS()150 p,_,_= xdks.permute(pred=self.pred1pt, true=self.true,J=100)151 self.assertGreaterEqual(1.0, p)152 def test_permute_v_1pt(self):153 xdks = ddks.methods.vdKS()154 p,_,_= xdks.permute(pred=self.pred1pt, true=self.true,J=100)155 self.assertGreaterEqual(1.0, p)156 def test_permute_r_1pt(self):157 xdks = ddks.methods.rdKS()158 p,_,_= xdks.permute(pred=self.pred1pt, true=self.true,J=100)159 self.assertGreaterEqual(1.0, p)160class MethodTests3D(unittest.TestCase):161 def setUp(self) -> None:162 d = 3163 n = 10164 self.pred = torch.normal(0, 1.0, (n, d))165 self.true = torch.normal(0, 1.0, (n, d))166 self.true2 = torch.normal(0, 1.0, (2 * n, d))167 self.pred1pt = torch.normal(0, 1.0, (1, d))168 self.data1 = [[0,0,0],[0,.1,0], [0,.2,0], [0,.3,0]]169 def test_ddks(self):170 xdks = ddks.methods.ddKS()171 self.assertGreaterEqual(1.0, xdks(self.pred,self.true))172 def test_vdks(self):173 xdks = ddks.methods.vdKS()174 self.assertGreaterEqual(1.0, xdks(self.pred,self.true))175 def test_rdks(self):176 xdks = ddks.methods.rdKS()177 self.assertGreaterEqual(1.0, xdks(self.pred, self.true))178 def test_permute_d(self):179 xdks = ddks.methods.ddKS()180 p,_,_= xdks.permute(pred=self.pred, true=self.true,J=100)181 self.assertGreaterEqual(1.0, p)182 def test_permute_v(self):183 xdks = ddks.methods.vdKS()184 p,_,_= xdks.permute(pred=self.pred, true=self.true,J=100)185 self.assertGreaterEqual(1.0, p)186 def test_permute_r(self):187 xdks = ddks.methods.rdKS()188 p,_,_= xdks.permute(pred=self.pred, true=self.true,J=100)189 self.assertGreaterEqual(1.0, p)190 def test_ddks_diffpt(self):191 xdks = ddks.methods.ddKS()192 self.assertGreaterEqual(1.0, xdks(self.pred,self.true2))193 def test_vdks_diffpt(self):194 xdks = ddks.methods.vdKS()195 self.assertGreaterEqual(1.0, xdks(self.pred,self.true2))196 def test_rdks_diffpt(self):197 xdks = ddks.methods.rdKS()198 self.assertGreaterEqual(1.0, xdks(self.pred, self.true2))199 def test_ddks_onept(self):200 xdks = ddks.methods.ddKS()201 self.assertGreaterEqual(1.0, xdks(self.pred1pt, self.true))202 def test_vdks_onept(self):203 xdks = ddks.methods.vdKS()204 self.assertGreaterEqual(1.0, xdks(self.pred1pt, self.true))205 def test_rdks_onept(self):206 xdks = ddks.methods.rdKS()207 self.assertGreaterEqual(1.0, xdks(self.pred1pt, self.true))208 def test_ddks_diffptrev(self):209 xdks = ddks.methods.ddKS()210 self.assertGreaterEqual(1.0, xdks(self.true2,self.pred))211 def test_vdks_diffptrev(self):212 xdks = ddks.methods.vdKS()213 self.assertGreaterEqual(1.0, xdks(self.true2,self.pred))214 def test_rdks_diffptrev(self):215 xdks = ddks.methods.rdKS()216 self.assertGreaterEqual(1.0, xdks(self.true2, self.pred))217 def test_ddks_oneptrev(self):218 xdks = ddks.methods.ddKS()219 self.assertGreaterEqual(1.0, xdks(self.true,self.pred1pt))220 def test_vdks_oneptrev(self):221 xdks = ddks.methods.vdKS()222 self.assertGreaterEqual(1.0, xdks(self.true,self.pred1pt))223 def test_rdks_oneptrev(self):224 xdks = ddks.methods.rdKS()225 self.assertGreaterEqual(1.0, xdks(self.true,self.pred1pt))226 def test_permute_d_diff(self):227 xdks = ddks.methods.ddKS()228 p,_,_= xdks.permute(pred=self.pred, true=self.true2,J=100)229 self.assertGreaterEqual(1.0, p)230 def test_permute_v_diff(self):231 xdks = ddks.methods.vdKS()232 p,_,_= xdks.permute(pred=self.pred, true=self.true2,J=100)233 self.assertGreaterEqual(1.0, p)234 def test_permute_r_diff(self):235 xdks = ddks.methods.rdKS()236 p,_,_= xdks.permute(pred=self.pred, true=self.true2,J=100)237 self.assertGreaterEqual(1.0, p)238 def test_permute_d_1pt(self):239 xdks = ddks.methods.ddKS()240 p,_,_= xdks.permute(pred=self.pred1pt, true=self.true,J=100)241 self.assertGreaterEqual(1.0, p)242 def test_permute_v_1pt(self):243 xdks = ddks.methods.vdKS()244 p,_,_= xdks.permute(pred=self.pred1pt, true=self.true,J=100)245 self.assertGreaterEqual(1.0, p)246 def test_permute_r_1pt(self):247 xdks = ddks.methods.rdKS()248 p,_,_= xdks.permute(pred=self.pred1pt, true=self.true,J=100)249 self.assertGreaterEqual(1.0, p)250class ddKSTest(unittest.TestCase):251 def setUp(self) -> None:252 d = 3253 n = 10254 self.pred = torch.normal(0, 1.0, (n, d))255 self.true = torch.normal(0, 1.0, (n, d))256 def test_soft(self):257 xdks = ddks.methods.ddKS(soft=True)258 self.assertGreaterEqual(1.0, xdks(self.pred, self.true))259 def test_norm(self):260 xdks = ddks.methods.ddKS(norm=True)261 self.assertGreaterEqual(1.0, xdks(self.pred, self.true))262 def test_oneway(self):263 xdks = ddks.methods.ddKS(oneway=False)264 self.assertGreaterEqual(1.0, xdks(self.pred, self.true))265 def test_subsample(self):266 xdks = ddks.methods.ddKS(method='subsample')267 self.assertGreaterEqual(1.0, xdks(self.pred, self.true))268 def test_linear(self):269 xdks = ddks.methods.ddKS(method='linear')270 self.assertGreaterEqual(1.0, xdks(self.pred, self.true))271class rdKSTest(unittest.TestCase):272 def setUp(self) -> None:273 d = 3274 n = 10275 self.pred = torch.normal(0, 1.0, (n, d))276 self.true = torch.normal(0, 1.0, (n, d))277 def test_norm(self):278 xdks = ddks.methods.rdKS(norm=True)279 self.assertGreaterEqual(1.0, xdks(self.pred, self.true))280class VoxelTests(unittest.TestCase):281 def setUp(self) -> None:282 d = 3283 n = 10284 self.pred = torch.normal(0, 1.0, (n, d))285 self.true = torch.normal(0, 1.0, (n, d))286 def test_numVox(self):287 numVox = torch.tensor([4,2,1])288 xdks = ddks.methods.vdKS(numVoxel=numVox)289 self.assertGreaterEqual(1.0, xdks(self.pred, self.true))290if __name__ == '__main__':...

Full Screen

Full Screen

test_listener.py

Source:test_listener.py Github

copy

Full Screen

...46 batchInfosCompleted = batch_collector.batchInfosCompleted47 streamingStartedTime = batch_collector.streamingStartedTime48 self.wait_for(batchInfosCompleted, 4)49 self.assertEqual(len(streamingStartedTime), 1)50 self.assertGreaterEqual(len(batchInfosSubmitted), 4)51 for info in batchInfosSubmitted:52 self.assertGreaterEqual(info.batchTime().milliseconds(), 0)53 self.assertGreaterEqual(info.submissionTime(), 0)54 for streamId in info.streamIdToInputInfo():55 streamInputInfo = info.streamIdToInputInfo()[streamId]56 self.assertGreaterEqual(streamInputInfo.inputStreamId(), 0)57 self.assertGreaterEqual(streamInputInfo.numRecords, 0)58 for key in streamInputInfo.metadata():59 self.assertIsNotNone(streamInputInfo.metadata()[key])60 self.assertIsNotNone(streamInputInfo.metadataDescription())61 for outputOpId in info.outputOperationInfos():62 outputInfo = info.outputOperationInfos()[outputOpId]63 self.assertGreaterEqual(outputInfo.batchTime().milliseconds(), 0)64 self.assertGreaterEqual(outputInfo.id(), 0)65 self.assertIsNotNone(outputInfo.name())66 self.assertIsNotNone(outputInfo.description())67 self.assertGreaterEqual(outputInfo.startTime(), -1)68 self.assertGreaterEqual(outputInfo.endTime(), -1)69 self.assertIsNone(outputInfo.failureReason())70 self.assertEqual(info.schedulingDelay(), -1)71 self.assertEqual(info.processingDelay(), -1)72 self.assertEqual(info.totalDelay(), -1)73 self.assertEqual(info.numRecords(), 0)74 self.assertGreaterEqual(len(batchInfosStarted), 4)75 for info in batchInfosStarted:76 self.assertGreaterEqual(info.batchTime().milliseconds(), 0)77 self.assertGreaterEqual(info.submissionTime(), 0)78 for streamId in info.streamIdToInputInfo():79 streamInputInfo = info.streamIdToInputInfo()[streamId]80 self.assertGreaterEqual(streamInputInfo.inputStreamId(), 0)81 self.assertGreaterEqual(streamInputInfo.numRecords, 0)82 for key in streamInputInfo.metadata():83 self.assertIsNotNone(streamInputInfo.metadata()[key])84 self.assertIsNotNone(streamInputInfo.metadataDescription())85 for outputOpId in info.outputOperationInfos():86 outputInfo = info.outputOperationInfos()[outputOpId]87 self.assertGreaterEqual(outputInfo.batchTime().milliseconds(), 0)88 self.assertGreaterEqual(outputInfo.id(), 0)89 self.assertIsNotNone(outputInfo.name())90 self.assertIsNotNone(outputInfo.description())91 self.assertGreaterEqual(outputInfo.startTime(), -1)92 self.assertGreaterEqual(outputInfo.endTime(), -1)93 self.assertIsNone(outputInfo.failureReason())94 self.assertGreaterEqual(info.schedulingDelay(), 0)95 self.assertEqual(info.processingDelay(), -1)96 self.assertEqual(info.totalDelay(), -1)97 self.assertEqual(info.numRecords(), 0)98 self.assertGreaterEqual(len(batchInfosCompleted), 4)99 for info in batchInfosCompleted:100 self.assertGreaterEqual(info.batchTime().milliseconds(), 0)101 self.assertGreaterEqual(info.submissionTime(), 0)102 for streamId in info.streamIdToInputInfo():103 streamInputInfo = info.streamIdToInputInfo()[streamId]104 self.assertGreaterEqual(streamInputInfo.inputStreamId(), 0)105 self.assertGreaterEqual(streamInputInfo.numRecords, 0)106 for key in streamInputInfo.metadata():107 self.assertIsNotNone(streamInputInfo.metadata()[key])108 self.assertIsNotNone(streamInputInfo.metadataDescription())109 for outputOpId in info.outputOperationInfos():110 outputInfo = info.outputOperationInfos()[outputOpId]111 self.assertGreaterEqual(outputInfo.batchTime().milliseconds(), 0)112 self.assertGreaterEqual(outputInfo.id(), 0)113 self.assertIsNotNone(outputInfo.name())114 self.assertIsNotNone(outputInfo.description())115 self.assertGreaterEqual(outputInfo.startTime(), 0)116 self.assertGreaterEqual(outputInfo.endTime(), 0)117 self.assertIsNone(outputInfo.failureReason())118 self.assertGreaterEqual(info.schedulingDelay(), 0)119 self.assertGreaterEqual(info.processingDelay(), 0)120 self.assertGreaterEqual(info.totalDelay(), 0)121 self.assertEqual(info.numRecords(), 0)122if __name__ == "__main__":123 import unittest124 from pyspark.streaming.tests.test_listener import *125 try:126 import xmlrunner127 testRunner = xmlrunner.XMLTestRunner(output='target/test-reports', verbosity=2)128 except ImportError:129 testRunner = None...

Full Screen

Full Screen

test_core_resources.py

Source:test_core_resources.py Github

copy

Full Screen

...44 self.assertRaises(ValueError, Image.core.set_alignment, -1)45 self.assertRaises(ValueError, Image.core.set_alignment, 3)46 def test_get_block_size(self):47 block_size = Image.core.get_block_size()48 self.assertGreaterEqual(block_size, 4096)49 def test_set_block_size(self):50 for i in [4096, 2*4096, 3*4096]:51 Image.core.set_block_size(i)52 block_size = Image.core.get_block_size()53 self.assertEqual(block_size, i)54 # Try to construct new image55 Image.new('RGB', (10, 10))56 self.assertRaises(ValueError, Image.core.set_block_size, 0)57 self.assertRaises(ValueError, Image.core.set_block_size, -1)58 self.assertRaises(ValueError, Image.core.set_block_size, 4000)59 def test_set_block_size_stats(self):60 Image.core.reset_stats()61 Image.core.set_blocks_max(0)62 Image.core.set_block_size(4096)63 Image.new('RGB', (256, 256))64 stats = Image.core.get_stats()65 self.assertGreaterEqual(stats['new_count'], 1)66 self.assertGreaterEqual(stats['allocated_blocks'], 64)67 if not is_pypy:68 self.assertGreaterEqual(stats['freed_blocks'], 64)69 def test_get_blocks_max(self):70 blocks_max = Image.core.get_blocks_max()71 self.assertGreaterEqual(blocks_max, 0)72 def test_set_blocks_max(self):73 for i in [0, 1, 10]:74 Image.core.set_blocks_max(i)75 blocks_max = Image.core.get_blocks_max()76 self.assertEqual(blocks_max, i)77 # Try to construct new image78 Image.new('RGB', (10, 10))79 self.assertRaises(ValueError, Image.core.set_blocks_max, -1)80 @unittest.skipIf(is_pypy, "images are not collected")81 def test_set_blocks_max_stats(self):82 Image.core.reset_stats()83 Image.core.set_blocks_max(128)84 Image.core.set_block_size(4096)85 Image.new('RGB', (256, 256))86 Image.new('RGB', (256, 256))87 stats = Image.core.get_stats()88 self.assertGreaterEqual(stats['new_count'], 2)89 self.assertGreaterEqual(stats['allocated_blocks'], 64)90 self.assertGreaterEqual(stats['reused_blocks'], 64)91 self.assertEqual(stats['freed_blocks'], 0)92 self.assertEqual(stats['blocks_cached'], 64)93 @unittest.skipIf(is_pypy, "images are not collected")94 def test_clear_cache_stats(self):95 Image.core.reset_stats()96 Image.core.clear_cache()97 Image.core.set_blocks_max(128)98 Image.core.set_block_size(4096)99 Image.new('RGB', (256, 256))100 Image.new('RGB', (256, 256))101 # Keep 16 blocks in cache102 Image.core.clear_cache(16)103 stats = Image.core.get_stats()104 self.assertGreaterEqual(stats['new_count'], 2)105 self.assertGreaterEqual(stats['allocated_blocks'], 64)106 self.assertGreaterEqual(stats['reused_blocks'], 64)107 self.assertGreaterEqual(stats['freed_blocks'], 48)108 self.assertEqual(stats['blocks_cached'], 16)109 def test_large_images(self):110 Image.core.reset_stats()111 Image.core.set_blocks_max(0)112 Image.core.set_block_size(4096)113 Image.new('RGB', (2048, 16))114 Image.core.clear_cache()115 stats = Image.core.get_stats()116 self.assertGreaterEqual(stats['new_count'], 1)117 self.assertGreaterEqual(stats['allocated_blocks'], 16)118 self.assertGreaterEqual(stats['reused_blocks'], 0)119 self.assertEqual(stats['blocks_cached'], 0)120 if not is_pypy:121 self.assertGreaterEqual(stats['freed_blocks'], 16)122class TestEnvVars(PillowTestCase):123 def tearDown(self):124 # Restore default values125 Image.core.set_alignment(1)126 Image.core.set_block_size(1024*1024)127 Image.core.set_blocks_max(0)128 Image.core.clear_cache()129 def test_units(self):130 Image._apply_env_variables({'PILLOW_BLOCKS_MAX': '2K'})131 self.assertEqual(Image.core.get_blocks_max(), 2*1024)132 Image._apply_env_variables({'PILLOW_BLOCK_SIZE': '2m'})133 self.assertEqual(Image.core.get_block_size(), 2*1024*1024)134 def test_warnings(self):135 self.assert_warning(...

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run autotest automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful