Best Python code snippet using fMBT_python
op-negate-inline-cache.js
Source:op-negate-inline-cache.js
1"use strict"2function opaqueIdentity(arg) {3 return arg;4}5noInline(opaqueIdentity)6function negateWithDoubleSub(arg) {7 // Implement integer negate as a double sub operation.8 return opaqueIdentity(6.4 - arg) - 6.4;9}10noInline(negateWithDoubleSub)11function opaqueNonZeroIntegerNegate(arg)12{13 return -arg;14}15noInline(opaqueNonZeroIntegerNegate);16function testNonZeroInteger()17{18 for (let i = 1; i < 1e4; ++i) {19 if (opaqueNonZeroIntegerNegate(i) !== negateWithDoubleSub(i)) {20 throw "Failed testNonZeroInteger() at i = " + i;21 }22 }23}24testNonZeroInteger();25function opaqueDoubleNegate(arg)26{27 return -arg;28}29noInline(opaqueDoubleNegate);30function testDouble()31{32 for (let i = 0; i < 1e4; ++i) {33 if ((opaqueDoubleNegate(i + 0.5)) + 0.5 + i !== 0) {34 throw "Failed testDouble() at i = " + i;35 }36 }37}38testDouble();39function opaqueObjectNegate(arg)40{41 return -arg;42}43noInline(opaqueObjectNegate);44function testObject()45{46 for (let i = 0; i < 1e4; ++i) {47 if ((opaqueObjectNegate({ valueOf: ()=>{ return i + 0.5 }})) + 0.5 + i !== 0) {48 throw "Failed testObject() at i = " + i;49 }50 }51}52testObject();53function opaqueIntegerAndDoubleNegate(arg)54{55 return -arg;56}57noInline(opaqueIntegerAndDoubleNegate);58function testIntegerAndDouble()59{60 for (let i = 1; i < 1e4; ++i) {61 if ((opaqueIntegerAndDoubleNegate(i)) + i !== 0) {62 throw "Failed testIntegerAndDouble() on integers at i = " + i;63 }64 if ((opaqueIntegerAndDoubleNegate(i + 0.5)) + 0.5 + i !== 0) {65 throw "Failed testIntegerAndDouble() on double at i = " + i;66 }67 }68}69testIntegerAndDouble();70function opaqueIntegerThenDoubleNegate(arg)71{72 return -arg;73}74noInline(opaqueIntegerThenDoubleNegate);75function testIntegerThenDouble()76{77 for (let i = 1; i < 1e4; ++i) {78 if ((opaqueIntegerThenDoubleNegate(i)) + i !== 0) {79 throw "Failed testIntegerThenDouble() on integers at i = " + i;80 }81 }82 for (let i = 1; i < 1e4; ++i) {83 if ((opaqueIntegerThenDoubleNegate(i + 0.5)) + 0.5 + i !== 0) {84 throw "Failed testIntegerThenDouble() on double at i = " + i;85 }86 }87}88testIntegerThenDouble();89function opaqueDoubleThenIntegerNegate(arg)90{91 return -arg;92}93noInline(opaqueDoubleThenIntegerNegate);94function testDoubleThenInteger()95{96 for (let i = 1; i < 1e4; ++i) {97 if ((opaqueDoubleThenIntegerNegate(i + 0.5)) + 0.5 + i !== 0) {98 throw "Failed testDoubleThenInteger() on double at i = " + i;99 }100 }101 for (let i = 1; i < 1e4; ++i) {102 if ((opaqueDoubleThenIntegerNegate(i)) + i !== 0) {103 throw "Failed testDoubleThenInteger() on integers at i = " + i;104 }105 }106}107testDoubleThenInteger();108function opaqueIntegerAndObjectNegate(arg)109{110 return -arg;111}112noInline(opaqueIntegerAndObjectNegate);113function testIntegerAndObject()114{115 for (let i = 1; i < 1e4; ++i) {116 if ((opaqueIntegerAndObjectNegate(i)) + i !== 0) {117 throw "Failed testIntegerAndObject() on integers at i = " + i;118 }119 if ((opaqueIntegerAndObjectNegate({ valueOf: ()=>{ return i + 0.5 }})) + 0.5 + i !== 0) {120 throw "Failed testIntegerAndObject() on double at i = " + i;121 }122 }123}124testIntegerAndObject();125function opaqueDoubleAndObjectNegate(arg)126{127 return -arg;128}129noInline(opaqueDoubleAndObjectNegate);130function testDoubleAndObject()131{132 for (let i = 1; i < 1e4; ++i) {133 if ((opaqueDoubleAndObjectNegate(i + 0.5)) + i + 0.5 !== 0) {134 throw "Failed testDoubleAndObject() on integers at i = " + i;135 }136 if ((opaqueDoubleAndObjectNegate({ valueOf: ()=>{ return i }})) + i !== 0) {137 throw "Failed testDoubleAndObject() on double at i = " + i;138 }139 }140}141testDoubleAndObject();142function opaqueIntegerThenObjectNegate(arg)143{144 return -arg;145}146noInline(opaqueIntegerThenObjectNegate);147function testIntegerThenObject()148{149 for (let i = 1; i < 1e4; ++i) {150 if ((opaqueIntegerThenObjectNegate(i)) + i !== 0) {151 throw "Failed testIntegerThenObject() on integers at i = " + i;152 }153 }154 for (let i = 1; i < 1e4; ++i) {155 if ((opaqueIntegerThenObjectNegate({ valueOf: ()=>{ return i + 0.5 }})) + 0.5 + i !== 0) {156 throw "Failed testIntegerThenObject() on double at i = " + i;157 }158 }159}160testIntegerThenObject();161function opaqueDoubleThenObjectNegate(arg)162{163 return -arg;164}165noInline(opaqueDoubleThenObjectNegate);166function testDoubleThenObject()167{168 for (let i = 1; i < 1e4; ++i) {169 if ((opaqueDoubleThenObjectNegate(i + 0.5)) + i + 0.5 !== 0) {170 throw "Failed testDoubleThenObject() on integers at i = " + i;171 }172 }173 for (let i = 1; i < 1e4; ++i) {174 if ((opaqueDoubleThenObjectNegate(i + 0.5)) + i + 0.5 !== 0) {175 throw "Failed testDoubleThenObject() on integers at i = " + i;176 }177 }178}179testDoubleThenObject();180function opaqueIntegerAndDoubleAndObjectNegate(arg)181{182 return -arg;183}184noInline(opaqueIntegerAndDoubleAndObjectNegate);185function testIntegerAndDoubleAndObject()186{187 for (let i = 1; i < 1e4; ++i) {188 if ((opaqueIntegerAndDoubleAndObjectNegate(i)) + i !== 0) {189 throw "Failed testIntegerAndDoubleAndObject() on integers at i = " + i;190 }191 if ((opaqueIntegerAndDoubleAndObjectNegate(i + 0.5)) + i + 0.5 !== 0) {192 throw "Failed testIntegerAndDoubleAndObject() on integers at i = " + i;193 }194 if ((opaqueIntegerAndDoubleAndObjectNegate({ valueOf: ()=>{ return i }})) + i !== 0) {195 throw "Failed testIntegerAndDoubleAndObject() on double at i = " + i;196 }197 }198}199testIntegerAndDoubleAndObject();200function opaqueIntegerNegateOverflow(arg)201{202 return -arg;203}204noInline(opaqueIntegerNegateOverflow);205function testIntegerNegateOverflow()206{207 for (let i = 1; i < 1e4; ++i) {208 if (opaqueIntegerNegateOverflow(0x80000000|0) !== 2147483648) {209 throw "Failed opaqueIntegerNegateOverflow() at i = " + i;210 }211 }212}213testIntegerNegateOverflow();214function opaqueIntegerNegateZero(arg)215{216 return -arg;217}218noInline(opaqueIntegerNegateZero);219function testIntegerNegateZero()220{221 for (let i = 1; i < 1e4; ++i) {222 if (1 / opaqueIntegerNegateZero(0) !== -Infinity) {223 throw "Failed testIntegerNegateZero() at i = " + i;224 }225 }226}227testIntegerNegateZero();228function gatedNegate(selector, arg)229{230 if (selector === 0) {231 return -arg;232 }233 if (selector == 42) {234 return -arg;235 }236 return arg;237}238noInline(gatedNegate);239function testUnusedNegate()240{241 for (let i = 1; i < 1e2; ++i) {242 if (gatedNegate(Math.PI, i) !== i) {243 throw "Failed first phase of testUnusedNegate";244 }245 }246 for (let i = 1; i < 1e4; ++i) {247 if (gatedNegate(0, i) + i !== 0) {248 throw "Failed second phase of testUnusedNegate";249 }250 }251 for (let i = 1; i < 1e4; ++i) {252 if (gatedNegate(42, i + 0.5) + 0.5 + i !== 0) {253 throw "Failed third phase of testUnusedNegate";254 }255 }256}...
common.py
Source:common.py
1from peachpy import *2from peachpy.x86_64 import *3sqrt2_over_2 = float.fromhex("0x1.6A09E6p-1")4cos_1pi_over_8 = float.fromhex("0x1.D906BCp-1")5cos_3pi_over_8 = float.fromhex("0x1.87DE2Ap-2")6tan_1pi_over_8 = float.fromhex("0x1.A8279Ap-2")7tan_3pi_over_8 = float.fromhex("0x1.3504F4p+1")8cos_npi_over_8 = [9 1.0,10 cos_1pi_over_8,11 sqrt2_over_2,12 cos_3pi_over_8,13 0.0,14 -cos_3pi_over_8,15 -sqrt2_over_2,16 -cos_1pi_over_8,17]18cos_npi_over_4 = [19 1.0,20 sqrt2_over_2,21 0.0,22 -sqrt2_over_223]24sin_npi_over_8 = [25 0.0,26 cos_3pi_over_8,27 sqrt2_over_2,28 cos_1pi_over_8,29 1.0,30 cos_1pi_over_8,31 sqrt2_over_2,32 cos_3pi_over_833]34sin_npi_over_4 = [35 0.0,36 sqrt2_over_2,37 1.0,38 sqrt2_over_239]40def _MM_SHUFFLE(z, y, x, w):41 assert z & ~0b11 == 042 assert y & ~0b11 == 043 assert x & ~0b11 == 044 assert w & ~0b11 == 045 return (z << 6) | (y << 4) | (x << 2) | w46def _MM_SHUFFLE2(x, y):47 assert x & ~1 == 048 assert y & ~1 == 049 return (x << 1) | y50def butterfly(a, b, negate_a=False, negate_b=False, scale_a=None, scale_b=None, negate_out_b=False, writeback=True):51 assert isinstance(a, YMMRegister) or isinstance(a, LocalVariable) and a.size == YMMRegister.size52 assert isinstance(b, YMMRegister) or isinstance(b, LocalVariable) and b.size == YMMRegister.size53 assert isinstance(negate_a, bool)54 assert isinstance(negate_b, bool)55 assert isinstance(negate_out_b, bool)56 assert scale_b is None or \57 isinstance(scale_b, YMMRegister) or \58 isinstance(scale_b, (LocalVariable, Constant)) and scale_b.size == YMMRegister.size59 assert scale_a is None or \60 isinstance(scale_a, YMMRegister) or \61 isinstance(scale_a, (LocalVariable, Constant)) and scale_a.size == YMMRegister.size62 assert scale_a is None or scale_b is None63 assert isinstance(writeback, bool)64 assert not negate_out_b or not negate_a and not negate_b and scale_a is None and scale_b is None65 ymm_a, ymm_b = a, b66 if isinstance(a, LocalVariable):67 ymm_a = YMMRegister()68 VMOVAPS(ymm_a, a)69 if isinstance(b, LocalVariable):70 ymm_b = YMMRegister()71 VMOVAPS(ymm_b, b)72 if scale_b is None and scale_a is None:73 assert not negate_a, "Negation of a is supported only in combination with scaling"74 ymm_new_a = YMMRegister()75 VADDPS(ymm_new_a, ymm_a, ymm_b)76 ymm_new_b = YMMRegister()77 if not negate_out_b:78 VSUBPS(ymm_new_b, ymm_a, ymm_b)79 else:80 VSUBPS(ymm_new_b, ymm_b, ymm_a)81 if not negate_b:82 SWAP.REGISTERS(ymm_new_a, ymm_a)83 SWAP.REGISTERS(ymm_new_b, ymm_b)84 else:85 SWAP.REGISTERS(ymm_new_a, ymm_b)86 SWAP.REGISTERS(ymm_new_b, ymm_a)87 elif scale_a is not None:88 ymm_a_copy = YMMRegister()89 VMOVAPS(ymm_a_copy, ymm_a)90 if not negate_a and not negate_b:91 VFMADD132PS(ymm_a, ymm_b, scale_a)92 VFMSUB132PS(ymm_a_copy, ymm_b, scale_a)93 elif not negate_a and negate_b:94 VFMSUB132PS(ymm_a, ymm_b, scale_a)95 VFMADD132PS(ymm_a_copy, ymm_b, scale_a)96 elif negate_a and not negate_b:97 VFMMADD132PS(ymm_a, ymm_b, scale_a)98 VFNMSUB132PS(ymm_a_copy, ymm_b, scale_a)99 elif negate_a and negate_b:100 VFNMSUB132PS(ymm_a, ymm_b, scale_a)101 VFNMADD132PS(ymm_a_copy, ymm_b, scale_a)102 SWAP.REGISTERS(ymm_b, ymm_a_copy)103 elif scale_b is not None:104 ymm_a_copy = YMMRegister()105 VMOVAPS(ymm_a_copy, ymm_a)106 if not negate_a and not negate_b:107 VFMADD231PS(ymm_a, ymm_b, scale_b)108 VFNMADD231PS(ymm_a_copy, ymm_b, scale_b)109 elif not negate_a and negate_b:110 VFNMADD231PS(ymm_a, ymm_b, scale_b)111 VFMADD231PS(ymm_a_copy, ymm_b, scale_b)112 elif negate_a and not negate_b:113 VFMSUB231PS(ymm_a, ymm_b, scale_b)114 VFNMSUB231PS(ymm_a_copy, ymm_b, scale_b)115 elif negate_a and negate_b:116 VFNMSUB231PS(ymm_a, ymm_b, scale_b)117 VFMSUB231PS(ymm_a_copy, ymm_b, scale_b)118 SWAP.REGISTERS(ymm_b, ymm_a_copy)119 if writeback and isinstance(a, LocalVariable):120 VMOVAPS(a, ymm_a)121 if writeback and isinstance(b, LocalVariable):122 VMOVAPS(b, ymm_b)123 return ymm_a, ymm_b124def transpose2x2x128(ymm_a, ymm_b, use_blend=True):125 # ymm_a = (a.lo, a.hi)126 # ymm_b = (b.lo, b.hi)127 if use_blend:128 # ymm_ab = (a.hi, b.lo)129 ymm_ab = YMMRegister()130 VPERM2F128(ymm_ab, ymm_a, ymm_b, 0x21)131 # ymm_a = (a.lo, b.lo)132 VBLENDPS(ymm_a, ymm_a, ymm_ab, 0xF0)133 # ymm_b = (a.hi, b.hi)134 VBLENDPS(ymm_b, ymm_b, ymm_ab, 0x0F)135 else:136 # ymm_new_a = (a.lo, b.lo)137 ymm_new_a = YMMRegister()138 VINSERTF128(ymm_new_a, ymm_a, ymm_b.as_xmm, 1)139 # ymm_new_b = (a.hi, b.hi)140 ymm_new_b = YMMRegister()141 VPERM2F128(ymm_new_b, ymm_a, ymm_b, 0x31)142 SWAP.REGISTERS(ymm_a, ymm_new_a)143 SWAP.REGISTERS(ymm_b, ymm_new_b)144def transpose2x2x2x64(ymm_a, ymm_b, use_blend=True):145 # ymm_a = (a0, a1, a2, a3)146 # ymm_b = (b0, b1, a2, b3)147 if use_blend:148 # ymm_ab = (a1, b0, a3, b2)149 ymm_ab = YMMRegister()150 VSHUFPD(ymm_ab, ymm_a, ymm_b, 0b0101)151 # ymm_a = (a0, b0, a2, b2)152 VBLENDPS(ymm_a, ymm_a, ymm_ab, 0b11001100)153 # ymm_b = (a1, b1, a3, b3)154 VBLENDPS(ymm_b, ymm_b, ymm_ab, 0b00110011)155 else:156 # ymm_new_a = (a0, b0, a2, b2)157 ymm_new_a = YMMRegister()158 VUNPCKLPD(ymm_new_a, ymm_a, ymm_b)159 # ymm_new_b = (a1, b1, a3, b3)160 ymm_new_b = YMMRegister()161 VUNPCKHPD(ymm_new_b, ymm_a, ymm_b)162 SWAP.REGISTERS(ymm_a, ymm_new_a)163 SWAP.REGISTERS(ymm_b, ymm_new_b)164def compute_masks(masks, reg_column_offset, reg_column_count):165 assert isinstance(masks, list) and all(isinstance(mask, (YMMRegister, LocalVariable)) for mask in masks)166 assert isinstance(reg_column_offset, GeneralPurposeRegister64)167 assert isinstance(reg_column_count, GeneralPurposeRegister64)168 169def interleave(sequence_a, sequence_b):170 assert isinstance(sequence_a, list) and isinstance(sequence_b, list) or isinstance(sequence_a, tuple) and isinstance(sequence_b, tuple)171 if isinstance(sequence_a, list):172 return list(sum(zip(sequence_a, sequence_b), ()))173 else:...
testData.js
Source:testData.js
1// data that feeds jest tests 2const testUser1 = {3 userId: 'jjuy',4 userContext: {5 state: 'california',6 beta: true,7 age: 20,8 student: false,9 },10};11const testUser2 = {12 userId: 'yrc',13 userContext: {14 state: 'new jersey',15 beta: false,16 age: 19,17 student: true,18 },19};20const testUser3 = {21 userId: 'ahsu',22 userContext: {23 state: 'washington',24 age: 50,25 student: false,26 },27};28const users = [testUser1, testUser2, testUser3];29const testConditions = {30 trueValue: {31 negate: false,32 operator: 'EQ',33 attribute: 'beta',34 vals: ['true'],35 },36 falseValue: {37 negate: false,38 operator: 'EQ',39 attribute: 'beta',40 vals: ['false'],41 },42 eQstring: {43 negate: false,44 operator: 'EQ',45 attribute: 'state',46 vals: ['california'],47 },48 isInstring: {49 negate: false,50 operator: 'IN',51 attribute: 'state',52 vals: ['california', 'washington', 'oregon'],53 },54 strContains: {55 negate: false,56 operator: 'STR_CONTAINS',57 attribute: 'state',58 vals: ['california'],59 },60 strEndsWith: {61 negate: false,62 operator: 'STR_ENDS_WITH',63 attribute: 'state',64 vals: ['california'],65 },66 strStartsWith: {67 negate: false,68 operator: 'STR_STARTS_WITH',69 attribute: 'state',70 vals: ['california'],71 },72 lessThanOrEqualTo20: {73 negate: false,74 operator: 'LT_EQ',75 attribute: 'age',76 vals: ['20'],77 },78 equalTo20: {79 negate: false,80 operator: 'EQ',81 attribute: 'age',82 vals: ['20'],83 },84 lessThan20: {85 negate: false,86 operator: 'LT',87 attribute: 'age',88 vals: ['20'],89 },90 greaterThan20: {91 negate: false,92 operator: 'GT',93 attribute: 'age',94 vals: ['20'],95 },96 greaterThanOrEqualTo: {97 negate: false,98 operator: 'GT_EQ',99 attribute: 'age',100 vals: ['20'],101 },102};103const data = {104 sdkKeys: {105 'c3e-db3100c-8': true,106 'de9-6bf1a0c-3': true,107 'fa4-d731f0e-4': true,108 },109 flags: {110 'beta-flag': {111 beta_testers: {112 combine: 'ANY',113 conditions: [114 {115 negate: false,116 operator: 'EQ',117 attribute: 'beta',118 vals: ['true'],119 },120 ],121 },122 status: true,123 },124 'not-beta-flag': {125 beta_testers: {126 combine: 'ANY',127 conditions: [128 {129 negate: true,130 operator: 'EQ',131 attribute: 'beta',132 vals: ['true'],133 },134 ],135 },136 status: true,137 },138 'toggled-off-flag-all': {139 status: false,140 },141 'toggled-on-flag-all': {142 status: true,143 },144 'cali-or-student': {145 california_students: {146 combine: 'ANY',147 conditions: [148 {149 negate: false,150 operator: 'EQ',151 attribute: 'state',152 vals: ['california'],153 },154 {155 negate: false,156 operator: 'EQ',157 attribute: 'student',158 vals: ['true'],159 },160 ],161 },162 status: true,163 },164 'cali-and-student': {165 california_students: {166 combine: 'AND',167 conditions: [168 {169 negate: false,170 operator: 'EQ',171 attribute: 'state',172 vals: ['california'],173 },174 {175 negate: false,176 operator: 'EQ',177 attribute: 'student',178 vals: ['true'],179 },180 ],181 },182 status: true,183 },184 'not-cali-nor-student': {185 california_students: {186 combine: 'AND',187 conditions: [188 {189 negate: true,190 operator: 'EQ',191 attribute: 'state',192 vals: ['california'],193 },194 {195 negate: true,196 operator: 'EQ',197 attribute: 'student',198 vals: ['true'],199 },200 ],201 },202 status: true,203 },204 'non-cali-student': {205 california_students: {206 combine: 'AND',207 conditions: [208 {209 negate: true,210 operator: 'EQ',211 attribute: 'state',212 vals: ['california'],213 },214 {215 negate: false,216 operator: 'EQ',217 attribute: 'student',218 vals: ['true'],219 },220 ],221 },222 status: true,223 },224 'qa-user-ids': {225 qa_users: {226 combine: 'ANY',227 conditions: [228 {229 negate: false,230 operator: 'IN',231 attribute: 'userId',232 vals: ['jjuy', 'yrc', 'ahsu'],233 },234 ],235 },236 status: true,237 },238 'userId-contains': {239 qa_users: {240 combine: 'ANY',241 conditions: [242 {243 negate: false,244 operator: 'STR_CONTAINS',245 attribute: 'userId',246 vals: ['u'],247 },248 ],249 },250 status: true,251 },252 'older-than-20': {253 adults: {254 combine: 'ANY',255 conditions: [256 {257 negate: false,258 operator: 'GT',259 attribute: 'age',260 vals: [20],261 },262 ],263 },264 status: true,265 },266 'less-than-or-eq-20': {267 adults: {268 combine: 'ANY',269 conditions: [270 {271 negate: false,272 operator: 'LT_EQ',273 attribute: 'age',274 vals: [20],275 },276 ],277 },278 status: true,279 },280 },281};282module.exports = {283 data,284 users,285 testUser1,286 testUser2,287 testUser3,288 testConditions,...
modular_negate_test.py
Source:modular_negate_test.py
...40 decomposition_to_ascii,41 cover,42 check_permutation_decomposition,43)44def test_toffoli_size_of_modular_negate():45 rec = DummyEngine(save_commands=True)46 eng = MainEngine(backend=rec, engine_list=[47 AutoReplacerEx(DecompositionRuleSet(modules=[48 swap2cnot,49 multi_not_rules,50 addition_rules,51 increment_rules,52 pivot_flip_rules,53 offset_rules,54 comparison_rules,55 modular_negate_rules,56 ])),57 LimitedCapabilityEngine(58 allow_toffoli=True,59 ),60 ])61 t = eng.allocate_qureg(5)62 controls = eng.allocate_qureg(1)63 workspace = eng.allocate_qureg(2)64 modulus = 2965 ModularNegate(modulus) & controls | t66 assert 100 < len(rec.received_commands) < 20067 assert workspace is not None68def test_bimultiplication_operation():69 assert ModularNegate(13).do_operation(0) == (0,)70 assert ModularNegate(13).do_operation(1) == (12,)71 assert ModularNegate(13).do_operation(2) == (11,)72 assert ModularNegate(13).do_operation(11) == (2,)73 assert ModularNegate(13).do_operation(12) == (1,)74 assert ModularNegate(13).do_operation(13) == (13,)75 assert ModularNegate(13).do_operation(14) == (14,)76def test_decompose_modular_negate():77 for register_size in cover(100, min=1):78 for control_size in cover(3):79 for h_modulus in cover(1 << register_size):80 modulus = h_modulus + 181 check_permutation_decomposition(82 decomposition_rule=decompose_modular_negate,83 gate=ModularNegate(modulus),84 register_sizes=[register_size],85 control_size=control_size,86 register_limits=[modulus])87def test_diagram_decompose_modular_negate():88 text_diagram = decomposition_to_ascii(89 gate=ModularNegate(13),90 decomposition_rule=decompose_modular_negate,91 register_sizes=[4],92 control_size=1)93 print(text_diagram)94 assert text_diagram == """95|0>----------------@----------------96 .------. .-----|-----. .------.97|0>-| |-| |-| |-98 | | | | | |99|0>-| |-| |-| |-100 | | | | | |101|0>-| â1 |-| Flip<12 |-| +1 |-...
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.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!