diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 32a1121..b8552be 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,16 +8,22 @@ on: branches: [ release ] workflow_dispatch: +# Add permission to write GitHub pages +permissions: + contents: write + pages: write + id-token: write + jobs: test: strategy: fail-fast: false matrix: - MATLABVersion: [R2021b,R2022a,R2022b,R2023a,R2023b] + MATLABVersion: [R2024a,R2024b] runs-on: ubuntu-latest steps: # Checks-out your repository - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 # Sets up a display server - name: Start display server @@ -32,7 +38,7 @@ jobs: uses: matlab-actions/setup-matlab@v2 with: release: ${{ matrix.MATLABVersion }} - products: Symbolic_Math_Toolbox + products: # Simulink Statistics_and_Machine_Learning_Toolbox # List required products above in the format shown (and uncomment them) # List of product strings: # Simulink @@ -50,10 +56,12 @@ jobs: # Upload the test results as artifact - name: Upload TestResults - uses: actions/upload-artifact@v3.1.3 + if: ${{ always() }} + uses: actions/upload-artifact@v4 with: - name: TestResults - path: ./SoftwareTests/TestResults_${{ matrix.MATLABVersion }}.txt + name: TestResults_${{ matrix.MATLABVersion }} + path: ./public/* + overwrite: true badge: if: ${{ always() }} @@ -64,26 +72,38 @@ jobs: steps: # Checks-out your repository - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 # Sets up R2023b - name: Setup MATLAB - uses: matlab-actions/setup-matlab@v1 + uses: matlab-actions/setup-matlab@v2 with: - release: R2023b + release: R2024b # Download the test results from artifact - - name: Download TestResults - uses: actions/download-artifact@v2.1.1 + - name: Download All TestResults + uses: actions/download-artifact@v4 with: - name: TestResults - path: ./SoftwareTests/ - + path: public + pattern: TestResults_* + merge-multiple: true + # Create the test results badge - - name: Run CreateBadge - uses: matlab-actions/run-command@v1 + - name: Run PostSmokeTest + uses: matlab-actions/run-command@v2 + with: + command: openProject(pwd); PostSmokeTest; + + # Deploy reports to GitHub pages + - name: Setup Pages + uses: actions/configure-pages@v5 + - name: Upload pages artifact + uses: actions/upload-pages-artifact@v3 with: - command: openProject(pwd); CreateBadge; + path: public + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 # Commit the JSON for the MATLAB releases badge - name: Commit changed files @@ -96,4 +116,3 @@ jobs: git commit Images/TestedWith.json -m "Update CI badges ${{ github.ref_name }}" git fetch git push - diff --git a/.gitignore b/.gitignore index 77eb745..28daa40 100644 --- a/.gitignore +++ b/.gitignore @@ -47,8 +47,5 @@ codegen/ # Project settings Utilities/ProjectSettings.mat -# Test results -SoftwareTests/TestResults_* - -# GitLab page fodler -public/ +# GitLab page folder +public/ \ No newline at end of file diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 76c003f..c16835c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,9 +1,87 @@ stages: +# Set up two testing paths + - setup - test + - deploy + - release -matlab-test-job: - tags: - - matlab - stage: test - script: - - matlab -batch "openProject('Integrals.prj'); results = runtests('IncludeSubfolders', true); disp(table(results)); assertSuccess(results);" +setup-job: + tags: + - matlab + stage: setup + script: + - cd .. + - if (test-path utilities) { rm -r -force utilities } + - git clone git@insidelabs-git.mathworks.com:modular-curriculum-content/utilities.git + - cd $CI_PROJECT_NAME + allow_failure: false + + +smoke-test: +# Smoke tests should run all the time + tags: + # Add additional tags like (e.g. - arduino) as required + # Make sure that the runner you plan to use matches the tags + - matlab + stage: test + parallel: + matrix: + - VERSION: [R2024a,R2024b] + script: + - Set-Alias -Name matlab -Value "C:\Program Files\MATLAB\$VERSION\bin\matlab.exe" + - matlab -batch "openProject(pwd);RunAllTests" + when: always + allow_failure: true + artifacts: + name: "$VERSION" + paths: + - public/* + when: always + + +pages: + tags: + - matlab + stage: deploy + script: + - matlab -batch "openProject(pwd);PostSmokeTest;" + artifacts: + paths: + - public + +file-test: + tags: + - matlab + stage: release + script: + - matlab -batch "proj = openProject(pwd); + addpath(proj.RootFolder+'/InternalFiles/Tests/CI'); + results = runtests('OpenCloseFileTest.m'); + disp(table(results)); assertSuccess(results);" + rules: +# This test should always run when merging to main +# And be available for manual running on any push + - if: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH + when: always + - if: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME != $CI_DEFAULT_BRANCH + when: manual + allow_failure: true + +release-testing: + tags: + - matlab + stage: release + script: + - matlab -batch "proj = openProject(pwd); + cd ..; + addpath(genpath(fullfile('utilities','TestingResources'))); + addpath(genpath(fullfile('utilities','Tools'))); + runCMTests" + rules: +# This test should always run when merging to main +# And be available for manual running on any push + - if: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH + when: always + - if: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME != $CI_DEFAULT_BRANCH + when: manual + allow_failure: true diff --git a/Apps/CalculusFlashcards.mlapp b/Apps/CalculusFlashcards.mlapp index 2a329c7..1f7721f 100644 Binary files a/Apps/CalculusFlashcards.mlapp and b/Apps/CalculusFlashcards.mlapp differ diff --git a/Apps/CalculusFlashcardsApp.m b/Apps/CalculusFlashcardsApp.m new file mode 100644 index 0000000..a15ae6a --- /dev/null +++ b/Apps/CalculusFlashcardsApp.m @@ -0,0 +1,1485 @@ +classdef CalculusFlashcardsApp < matlab.apps.AppBase + + % Properties that correspond to app components + properties (Access = public) + CalculusFlashcardsAppUIFigure matlab.ui.Figure + GridLayout matlab.ui.container.GridLayout + TabGroup matlab.ui.container.TabGroup + SettingsTab matlab.ui.container.Tab + GridLayout12 matlab.ui.container.GridLayout + GridLayout22 matlab.ui.container.GridLayout + SettingsMessage matlab.ui.control.Label + GridLayout18 matlab.ui.container.GridLayout + ShowsolutionsButtonGroup matlab.ui.container.ButtonGroup + NoButton matlab.ui.control.RadioButton + YesButton matlab.ui.control.RadioButton + VariableOptionsButtonGroup matlab.ui.container.ButtonGroup + xortButton matlab.ui.control.RadioButton + variousButton matlab.ui.control.RadioButton + ProblemTypesPanel matlab.ui.container.Panel + GridLayout13 matlab.ui.container.GridLayout + GridLayout14 matlab.ui.container.GridLayout + FunctionTypesPanel matlab.ui.container.Panel + TrigFunctions matlab.ui.control.CheckBox + ExpLnFunctions matlab.ui.control.CheckBox + PolynomialFunctions matlab.ui.control.CheckBox + RandomizePanel matlab.ui.container.Panel + allTypesCheckBox matlab.ui.control.CheckBox + IntegralsPanel matlab.ui.container.Panel + definiteIntCheckBox matlab.ui.control.CheckBox + substitutionIntCheckBox matlab.ui.control.CheckBox + simpleintegralCheckBox matlab.ui.control.CheckBox + bypartsIntCheckBox matlab.ui.control.CheckBox + allintegralsCheckBox matlab.ui.control.CheckBox + DerivativesPanel matlab.ui.container.Panel + powerrulelinearityDerCheckBox matlab.ui.control.CheckBox + chainruleDerCheckBox matlab.ui.control.CheckBox + simplederivativesCheckBox matlab.ui.control.CheckBox + productruleDerCheckBox matlab.ui.control.CheckBox + allderivativesCheckBox matlab.ui.control.CheckBox + PracticeProblemsTab matlab.ui.container.Tab + GridLayout2 matlab.ui.container.GridLayout + GridLayout3 matlab.ui.container.GridLayout + GridLayout16 matlab.ui.container.GridLayout + FeedbackStatement matlab.ui.control.Label + GridLayout17 matlab.ui.container.GridLayout + ProposedSoln matlab.ui.control.Label + ProposedSolnLabel matlab.ui.control.Label + GridLayout15 matlab.ui.container.GridLayout + GridLayout7 matlab.ui.container.GridLayout + PreviewSolutionButton matlab.ui.control.Button + SubmitSolutionButton matlab.ui.control.Button + GridLayout6 matlab.ui.container.GridLayout + SolPrompt matlab.ui.control.Label + SolutionEditField matlab.ui.control.EditField + GridLayout5 matlab.ui.container.GridLayout + Warning matlab.ui.control.Label + ProbStatement matlab.ui.control.Label + GridLayout4 matlab.ui.container.GridLayout + GenerateProblemButton matlab.ui.control.Button + AnalysisTab matlab.ui.container.Tab + GridLayout19 matlab.ui.container.GridLayout + GridLayout20 matlab.ui.container.GridLayout + GridLayout24 matlab.ui.container.GridLayout + AnalysisFeedback matlab.ui.control.Label + GridLayout23 matlab.ui.container.GridLayout + ClearHistoryButton matlab.ui.control.Button + UITable matlab.ui.control.Table + UIAxes matlab.ui.control.UIAxes + end + + + properties (Access = private) + myFun % a symbolic function used in this problem + mySol % a symbolic solution used in this problem + varChoice % the variable to use in myFun + probOpts % tracks the possible problem types considered + probType % tracks the type of problem + funcOpts % tracks the types of functions allowed + aTob % a vector of the endpoints of a definite integral + varOpts % a vector of potential variables + bds % a vector of limits on the choices of constants + myAnswer % a symbolic function containing the solution + prevFuncType % Tracks the last type of function generated + lastFive % a matrix recording the last five attempts on each probOpt + solnChkAttempts % a vector counting total checked submissions by probOpt + numResub % a vector counting total checked submissions by probOpt with newQuestionFlag == 0 + errorCount % a vector counting total errors by probOpt + numCorrect % a vector counting total correct solutions by probOpt + generatedProbs % a vector counting total problems generated by probOpt + recordResults % a boolean that tracks whether results should be recorded + fullNames = ["simpleDer" "prodDer" "chainDer" "powerDer" "simpleInt" "subsInt" "byPartsInt" "defInt"; ... + "Simple derivative" "Product Rule derivative" "Chain Rule derivative" "Power & Linearity Rules derivative" ... + "Simple integral" "Substitution integral" "Integration by Parts" "Definite integral"; ... + "Simple der." "Product Rule der." "Chain Rule der." "Power & Linearity der." ... + "Simple int." "Substitution int." "Int. by Parts" "Definite int."]; + showSoln % a boolean that tracks whether solutions should be shown + newQuestionFlag % a boolean that tracks whether a new question is currently showing + needNewQuesFlag % a boolean that tracks whether the current question is of an unselected probType + end + + methods (Access = private) + + function addVarOpts(app,var) + idx = find(app.varOpts == var,1); + if isempty(idx) + app.varOpts = [app.varOpts var]; + end + end + + function dropVarOpts(app,var) + app.varOpts = app.varOpts(app.varOpts~=var); + app.allVarsCheckBox.Value = 0; + end + + function genProb(app) + % Clear the warning from the previous problem + app.Warning.Text = " "; + app.Warning.FontColor = [0.85,0.33,0.10]; + if ~isempty(app.probOpts) + app.varChoice = app.varOpts(randi([1 length(app.varOpts)], 1)); + app.probType = app.probOpts(randi([1 length(app.probOpts)],1)); + genProbType(app) + if ~isempty(app.myFun) + myFuncStr = latex(app.myFun); + if contains(app.probType,"Der") + formatSpec = "Compute the derivative of $f(%s) = %s$ with respect to %s."; + str = compose(formatSpec,[app.varChoice myFuncStr app.varChoice]); + elseif contains(app.probType,"def") + formatSpec = "Compute the integral $\\displaystyle\\int_{%i}^{%i}%s\\,d%s$"; + str = compose(formatSpec,app.aTob(1),app.aTob(2),myFuncStr,app.varChoice); + else + formatSpec = "Compute the integral $\\displaystyle\\int %s\\,d%s$"; + str = compose(formatSpec,[myFuncStr app.varChoice]); + end + app.ProbStatement.Text = str; + % Print the appropriate solution prompt for the problem + % type and variable choice + if contains(app.probType,"Der") + formatStr = "$\\frac{df}{d%s} = $"; + str = compose(formatStr,app.varChoice); + elseif contains(app.probType,"def") + formatStr = "$\\displaystyle\\int_{%i}^{%i}f(%s)\\,d%s = $"; + str = compose(formatStr,app.aTob(1),app.aTob(2),app.varChoice,app.varChoice); + else + formatStr = "$\\displaystyle\\int f(%s)\\,d%s = $"; + str = compose(formatStr,app.varChoice,app.varChoice); + end + app.SolPrompt.Text = str; + % Set remaining warning necessary for new problem + if contains(app.probType,"Int") + app.Warning.Text = app.Warning.Text + " If required, use +C. "; + end + if contains(app.probType,"def") + app.Warning.Text = app.Warning.Text + " If the integral diverges, use Inf " + ... + "for $\infty$ or -Inf for $-\infty$ or DNE for 'does not exist'."; + end + end + else + app.ProbStatement.Text = "Please select at least one problem type in the Settings " + ... + "tab and then click 'Generate Problem'"; + end + if app.Warning.Text == " " + app.Warning.Text = "If necessary, warnings display here."; + end + end + + function genProbType(app) + f = 1; g = 1; x = 1; %#ok % Define local variables + switch app.probType + case "simpleDer" + app.myFun = genFunDiff(app,[1 10],app.varChoice,[5 10]); + case "prodDer" + syms f(x) g(x) x + f(x) = genFunDiff(app,[1 7],x,[1 10]); + g(x) = genFunDiff(app,[1 7],x,[1 10]); + app.myFun = f(app.varChoice)*g(app.varChoice); + case "chainDer" + syms f(x) g(x) x + f(x) = genFunDiff(app,[1 3],x,[1 10]); + g(x) = genFunDiff(app,[1 5],x,[1 10]); + app.myFun = f(g(app.varChoice)); + case "powerDer" + if app.funcOpts(1) + app.myFun = genFunDiff(app,[1 10],app.varChoice,[1 6]); + else + app.ProbStatement.Text = "Please allow polynomial functions to practice this problem type."; + app.Warning.Text = "You can add polynomial functions in the Settings tab."; + app.myFun = string.empty; + end + case "simpleInt" + syms f(x) + f(x) = genFunDiff(app,[1 7],x,[5 10]); + app.myFun = diff(f(app.varChoice),app.varChoice); + case "byPartsInt" + if all(app.funcOpts == [1 0 0]) + app.ProbStatement.Text = "Please select trigonometric functions and/or exponentials and "... + + newline + "logarithms to practice this problem type."; + app.Warning.Text = "You can add function types in the Settings tab."; + app.myFun = string.empty; + else + syms f(x) g(x) x + [f(x),val] = genFunDiff(app,[1 10],x,[11 14]); + if val == 12 + g(x) = genFunDiff(app,[1 10],x,[8 11]); + fun(x) = f(x)*g(x); + app.myFun = fun(app.varChoice); + else + app.myFun = f(app.varChoice); + end + end + case "defInt" + a = randi([-3, 3], 1); + b = a+randi([0, 4], 1); + app.aTob = [a b]; + app.myFun = genFunDiff(app,[1 7],app.varChoice,[1 10]); + case "subsInt" + syms f(x) g(x) x + f(x) = genFunDiff(app,[1 3],x,[1 10]); + g(x) = genFunDiff(app,[1 5],x,[5 10]); + app.myFun = diff(f(g(app.varChoice)),app.varChoice); + end + end + + function [myFunc,type] = genFunDiff(app,bds,var,range) + f = 1; t = 1; %#ok % Define local variables + syms f(t) % Create a symbolic function f(t) + params = randi(bds,[1 4]); % Randomly choose parameter values + shift = randi([0 max(abs(bds))],1); % Randomly choose a shift that may be 0 + sgns = randi([0 1],[1 3]); % Randomly choose +/- signs + + % For readability, create parameters a,b,c, and d + a = (-1)^sgns(1)*params(1); + b = (-1)^sgns(2)*params(2); + c = max(params(3),params(4)); % c > 0, it is only used as a denominator + d = (-1)^sgns(3)*shift; + + if all(app.funcOpts) + type = randi(range,1); + elseif all(app.funcOpts == [1 0 0]) % Only polys + localOpts = intersect(range(1):range(2),[1:6 12]); + type = localOpts(randi(numel(localOpts),1)); + elseif all(app.funcOpts == [0 0 1]) % Only trig + localOpts = [9 10]; + type = localOpts(randi(1:2,1)); + elseif all(app.funcOpts == [0 1 0]) % Only exp/ln + localOpts = [7 8 11]; + type = localOpts(randi([1 3],1)); + elseif all(app.funcOpts == [1 0 1]) % No exp/ln + localOpts = setdiff(range(1):range(2),[7 8 11 13 14]); + type = localOpts(randi(numel(localOpts),1)); + elseif all(app.funcOpts == [1 1 0]) % No trig + localOpts = setdiff(range(1):range(2),[9 10 13 14]); + type = localOpts(randi(numel(localOpts),1)); + elseif all(app.funcOpts == [0 1 1]) % No polynomials + localOpts = intersect(range(1):range(2),[7:11 13 14]); + type = localOpts(randi(numel(localOpts),1)); + else + warning("This should never be reached. No function was selected.") + end + switch type + case 1 + f(t) = a*t^b+c*t^d; + case 2 + f(t) = a*t^b+t^(d/c); + case 3 + f(t) = t^a+c*t^b+t^d; + case 4 + f(t) = t^a+c*t^b+d; + case 5 + f(t) = a*t^(b); + case 6 + f(t) = a*t^(b/c); + case 7 + f(t) = a*log(abs(b)*t+d); + if (app.prevFuncType ~= 7)&&(app.prevFuncType ~= 11) + app.Warning.Text = "Remember that log(x) is the notation " + ... + "for a natural logarithm of x in MATLAB. "; + end + case 8 + f(t) = a*exp(b*t+d); + if app.prevFuncType ~= 8 + app.Warning.Text = "Remember that exp(x) is the notation " + ... + "for $e^x$ in MATLAB. "; + end + case 9 + f(t) = a*sin(b*t+d); + case 10 + f(t) = a*cos(b*t+d); + case 11 + f(t) = a*log(ceil(c/4)*t); + if (app.prevFuncType ~= 7)&&(app.prevFuncType ~= 11) + app.Warning.Text = "Remember that log(x) is the notation " + ... + "for a natural logarithm of x in MATLAB. "; + end + case 12 + f(t) = a*t^c; + case 13 + f(t) = a*sin(b*t+d)*exp(b*t+d); + case 14 + f(t) = a*cos(b*t+d)*exp(b*t+d); + end + + myFunc = f(var); + app.prevFuncType = type; + end + + function addType(app,opt) + if isempty(app.probOpts) + app.probOpts = opt; + app.lastFive = zeros(1,5); + app.solnChkAttempts = 0; + app.errorCount = 0; + app.generatedProbs = 0; + app.numCorrect = 0; + app.numResub = 0; + app.needNewQuesFlag = 1; + elseif nnz(contains(app.probOpts,opt)) == 0 + app.probOpts = [app.probOpts opt]; + app.lastFive = [app.lastFive; zeros(1,5)]; + app.solnChkAttempts = [app.solnChkAttempts; 0]; + app.errorCount = [app.errorCount; 0]; + app.generatedProbs = [app.generatedProbs; 0]; + app.numCorrect = [app.numCorrect; 0]; + app.numResub = [app.numResub; 0]; + app.needNewQuesFlag = 0; + end + end + + function removeType(app,opt) + idx = app.probOpts ~= opt; + app.probOpts = app.probOpts(idx); + app.allTypesCheckBox.Value = 0; + if contains(opt,"Der") + app.allderivativesCheckBox.Value = 0; + elseif contains(opt,"Int") + app.allintegralsCheckBox.Value = 0; + end + app.lastFive = app.lastFive(idx,:); + app.solnChkAttempts = app.solnChkAttempts(idx,:); + app.errorCount = app.errorCount(idx,:); + app.generatedProbs = app.generatedProbs(idx,:); + app.numCorrect = app.numCorrect(idx,:); + app.numResub = app.numResub(idx,:); + if app.probType == opt + app.needNewQuesFlag = 1; + else + app.needNewQuesFlag = 0; + end + end + + function isCorrect = checkSolution(app) + C = 1; %#ok % Define local variables + syms C + % Determine the correct solution + if contains(app.probType,"Der") + correctAnswer = diff(app.myFun,app.varChoice); + elseif contains(app.probType,"def") + correctAnswer = int(app.myFun,app.varChoice,app.aTob(1),app.aTob(2)); + else + correctAnswer = int(app.myFun,app.varChoice)+C; + end + % Check if app.myAnswer is a correct solution + if correctAnswer == app.myAnswer + app.FeedbackStatement.Text = "This solution is correct."; + isCorrect = 1; + elseif isnan(app.myAnswer) + if isnan(correctAnswer) + app.FeedbackStatement.Text = "This solution does not exist. That is correct."; + isCorrect = 1; + elseif ~isreal(correctAnswer) + app.FeedbackStatement.Text = "This solution does not converge to a real value. That is correct."; + isCorrect = 1; + elseif abs(correctAnswer) == Inf + app.FeedbackStatement.Text = "This integral diverges." + newline; + app.FeedbackStatement.Text = app.FeedbackStatement.Text + " In fact, we can say even more " + ... + "than 'does not exist' because how it diverges is computable."; + isCorrect = 1; + elseif app.showSoln == 1 + app.FeedbackStatement.Text = "This integral diverges." + newline; + else + app.FeedbackStatement.Text = app.FeedbackStatement.Text + "This answer is incorrect. "; + isCorrect = 0; + end + elseif isnan(correctAnswer) + app.FeedbackStatement.Text = "This answer is incorrect. This solution does not exist."; + isCorrect = 0; + elseif simplify(correctAnswer - app.myAnswer) == 0 + app.FeedbackStatement.Interpreter = "latex"; + if has(correctAnswer,C) + app.FeedbackStatement.Text = "This solution is correct. Another equivalent form is: " + ... + "$\displaystyle " + latex(correctAnswer - C) + " + C$"; + else + app.FeedbackStatement.Text = "This solution is correct. Another equivalent form is: " + ... + "$\displaystyle " + latex(correctAnswer) + "$"; + end + isCorrect = 1; + elseif contains(app.probType,"def") && isinf(correctAnswer) + if app.showSoln == 1 + app.FeedbackStatement.Text = "This integral diverges." + newline; + end + if isinf(app.myAnswer) && sign(correctAnswer)==sign(app.myAnswer) + isCorrect = 1; + else + app.FeedbackStatement.Text = app.FeedbackStatement.Text + " You should check your signs " + ... + "and your limits. Where is the discontinuity? "; + isCorrect = 0; + end + elseif contains(app.probType,"def") && has(app.myAnswer,C) + app.FeedbackStatement.Text = "This answer is incorrect. This definite integral should give " + ... + "you a numerical result. "; + isCorrect = 0; + elseif contains(app.probType,"def") && (abs(vpa(correctAnswer)-app.myAnswer) < 1e-16) + app.FeedbackStatement.Text = "This solution is correct."; + app.ProposedSoln.Text = app.ProposedSoln.Text + "$\approx$" + vpa(app.myAnswer); + isCorrect = 1; + elseif contains(app.probType,"Int") && (correctAnswer-C) == app.myAnswer + app.FeedbackStatement.Text = "This answer is missing +C. "; + isCorrect = 0; + elseif contains(app.probType,"Int") && ~contains(app.probType,"def") ... + && isAlways(diff(correctAnswer,app.varChoice) == diff(app.myAnswer,app.varChoice)) + app.FeedbackStatement.Text = "This solution is correct. Another equivalent form is: " + ... + "$\displaystyle " + latex(correctAnswer - C) + " + C$"; + isCorrect = 1; + else + [~,outRest] = regexp(app.SolutionEditField.Value,'exp|sin|sqrt|log|tan|cot|cos|sec|csc','match','split'); + newStr = strjoin(outRest); + outVars = regexp(newStr,'[xtyzwr]','match'); + varStr = strjoin(outVars); + k = 1; + while k <= length(varStr) + if convertCharsToStrings(varStr(k)) ~= app.varChoice + app.FeedbackStatement.Text = "This solution should be a function of " + app.varChoice + " not " + varStr(k) + ". "; + k = length(varStr)+1; + end + % Required to skip the blank characters inlcuded by + % strjoin when creating varStr + k = k + 2; + end + app.FeedbackStatement.Text = app.FeedbackStatement.Text + "This answer is incorrect. "; + isCorrect = 0; + end + if app.showSoln == 1 && isCorrect == 0 + if contains(latex(correctAnswer),"C") + app.FeedbackStatement.Text = app.FeedbackStatement.Text + "The correct answer " + ... + "is: $\displaystyle " + latex(correctAnswer-C) + "+ C$"; + elseif isnan(correctAnswer) + app.FeedbackStatement.Text = app.FeedbackStatement.Text + "The correct answer is: DNE"; + elseif isinf(correctAnswer) + app.FeedbackStatement.Text = app.FeedbackStatement.Text + "The correct answer " + ... + "is: $" + latex(sign(correctAnswer)*sym(Inf)) + "$"; + else + app.FeedbackStatement.Text = app.FeedbackStatement.Text + "The correct answer " + ... + "is: $\displaystyle " + latex(correctAnswer) + "$"; + end + end + end + + function createAnalysisFeedbackText(app) + if app.showSoln == 1 + numSkipped = app.generatedProbs-(app.numCorrect+app.errorCount); +% pctTypeWrong = (app.errorCount+numSkipped)./(app.generatedProbs)*100; + overallRight = sum(app.numCorrect)/sum(app.generatedProbs)*100; + else + numSkipped = (app.generatedProbs + app.numResub) - (app.numCorrect + app.errorCount); +% pctTypeWrong = (app.errorCount+numSkipped)./(app.generatedProbs+app.numResub)*100; + overallRight = sum(app.numCorrect)/(sum(app.generatedProbs)+sum(app.numResub))*100; + end + subPctWrong = app.errorCount./(app.numCorrect+app.errorCount)*100; + overallNumSkipped = sum(numSkipped); +% pctTypeWrong(app.generatedProbs == 0) = 0; + + % Check if the user has completed any problems at all + if sum(app.generatedProbs) == 0 + str = "You need to practice before there are any results to analyze. Please click the 'Practice Problems' tab."; + else + if overallNumSkipped == 1 + grammarChoice = "problem was"; + else + grammarChoice = "problems were"; + end + str = compose("Overall success rate: %.1f\\%% based on %i different problems. %i %s skipped. \n" + ... + "Continue practicing by clicking the 'Practice Problems' tab.\n\n" + ... + "Breaking down by type: \n",overallRight,sum(app.generatedProbs),overallNumSkipped,grammarChoice); + % Setting up for later + if max(app.generatedProbs) >= 5 + lastCorrect = sum(app.lastFive,2); + grammarL5Choice = lastCorrect == 1; + grammarIdx = grammarL5Choice + 1; + grammarOpt = ["solutions were" "solution was"]; + end + % Generate individual feedback by problem type + for k = 1:length(app.probOpts) + longName = app.fullNames(2,find(app.fullNames(1,:) == app.probOpts(k))); + if app.generatedProbs(k) == 0 + str = str + compose("%s: No problems of this type were generated yet. ",longName); + else + str = str + compose("%s: %i solution(s) submitted of which %.1f\\%% were wrong. ", ... + longName,app.errorCount(k)+app.numCorrect(k),subPctWrong(k)); + end + % If problems of this type have been resubmitted, give + % additional feedback on how frequently + if app.numResub(k) == 1 + str = str + "There was one resubmission. "; + elseif app.numResub(k) > 1 + str = str + compose("There were %i resubmissions.",app.numResub(k)); + end + % If problems of this type have been skipped, give + % additional feedback on how frequently + if numSkipped(k) == 1 + str = str + "One problem was skipped. "; + elseif numSkipped(k) > 1 + str = str + compose("%i problems were skipped. ",numSkipped(k)); + end + % If there have been more than 5 problems of this type, + % give additional feedback on latest rate of success + if app.generatedProbs(k) >= 5 + str = str + compose("Of the last five, %i %s correct. ", ... + lastCorrect(k),grammarOpt(grammarIdx(k))); + end + str = str + newline; + end + end + app.AnalysisFeedback.Text = str; + end + + function updateScoreRecords(app,isCorrect) + if app.recordResults + idx = find(app.probOpts==app.probType); + app.lastFive(idx,:) = [app.lastFive(idx,2:5) isCorrect]; + app.errorCount(idx) = app.errorCount(idx) + (1-isCorrect); + app.numCorrect(idx) = app.numCorrect(idx) + isCorrect; + else + app.FeedbackStatement.Text = convertCharsToStrings(app.FeedbackStatement.Text) + newline ... + + "This submission is not recorded for analysis."; + end + end + + function results = previewSolution(app) + C = 1; x = 1; y = 1; z= 1; w = 1; r = 1; t = 1; %#ok % Define local variables + syms C x y z w r t %#ok + app.ProposedSolnLabel.Text = "My solution is " + app.SolPrompt.Text; + try + if contains(app.SolutionEditField.Value,'DNE') + myAnswerStr = "NaN"; + elseif contains(app.SolutionEditField.Value,'int') || contains(app.SolutionEditField.Value,'diff') + ME = MException('InputField:invalidArgument','You may not use MATLAB integration or differentiation commands.'); + throw(ME); + else + % Testing for unknown functions or variables by + % stripping out all the known values and seeing what is + % left + [~,outRest] = regexp(app.SolutionEditField.Value,'exp|sin|sqrt|log|tan|cot|cos|sec|csc|Inf|-Inf','match','split'); + newStr = strjoin(outRest); + [~,outVars] = regexp(newStr,'[xtyzwrC]','match','split'); + varStr = strjoin(outVars); + testStr = regexp(varStr,'[a-zA-Z]*','match'); + if ~isempty(testStr) + outTest = strjoin(testStr); + if regexp(outTest,'\') + ME = MException("InputField:syntaxError","You must use log() for the natural logarithm, not ln()."); + throw(ME); + elseif regexp(outTest,'\') + ME = MException("InputField:syntaxError","You must use exp() for the exponential function, not e^()."); + throw(ME); + else + ME = MException("InputField:syntaxError","Unknown variable or incorrect function usage."); + throw(ME); + end + end + myAnswerStr = convertCharsToStrings(app.SolutionEditField.Value); + end + app.myAnswer = str2sym(myAnswerStr); + if has(app.myAnswer,"C") + ansStr = latex(app.myAnswer - C); + app.ProposedSoln.Text = "$"+ansStr+" + C$"; + elseif myAnswerStr == "NaN" + app.ProposedSoln.Text = "DNE"; + else + app.ProposedSoln.Text = "$"+latex(str2sym(app.SolutionEditField.Value))+"$"; + end + results = 1; + app.FeedbackStatement.Text = " "; + catch ME + results = 0; + str0 = string(1); + str2 = string(1); + % Give advice as to how to proceed to fix the error. + app.FeedbackStatement.Interpreter = "none"; + app.ProposedSolnLabel.Text = "Error: "; + if ME.identifier == "symbolic:str2sym:UnableToConvert" + app.ProposedSoln.Text = " Syntax error"; + elseif ME.identifier == "InputField:syntaxError" + app.ProposedSoln.Text = " Incorrect use of ln"; + else + app.ProposedSoln.Text = " " + ME.identifier; + end + if contains(ME.message,"log()") + str2 = ME.message; + str0 = "Check your logarithms."; + elseif ME.identifier == "MATLAB:UndefinedFunction" + if ME.message == "Unrecognized function or variable 'e'." + str0 = convertCharsToStrings(ME.message); + str2 = "Are you using exp() for the exponential function?"; + elseif ME.message == "Undefined function 'ln' for input arguments of type 'sym'." + str0 = convertCharsToStrings(ME.message); + str2 = "Are you using log(x) for the natural logarithm?"; + elseif contains(ME.message,"Unrecognized function") + str0 = convertCharsToStrings(ME.message); + str2 = "Are you using MATLAB functions like exp(), cos(), sin(), sqrt(), and log()?" + newline + ... + "Are you properly using the carat command, ^, for powers?"; + end + elseif ME.identifier == "MATLAB:m_missing_operator" + str0 = convertCharsToStrings(ME.message); + str2 = "Do you have missing * symbols? Check all your multiplications."; + elseif contains(ME.message,"SYNER:") && ~contains(ME.message,"EOL") + str2 = extractAfter(ME.message,"SYNER:"); + str0 = " Do you have missing * symbols? Check all your multiplications."; + elseif contains(ME.message,"BADFP:") + str2 = extractAfter(ME.message,"BADFP:"); + str0 = " Do you have missing * symbols? Check all your multiplications."; + elseif contains(ME.message,"NOPAR:") + str2 = extractAfter(ME.message,"NOPAR:"); + str0 = " Do you have missing * symbols? Do all of your parentheses match? Are you using " + ... + "correct function names?"; + elseif contains(ME.message,"Cell array") + str2 = " You should be using parentheses, (), not curly braces, {}, or square " + ... + "brackets, [], to group elements of your expression."; + str0 = " Do you have missing * symbols? Do all of your parentheses match?"; + elseif contains(ME.message,"") + str0 = " There is an error at the end of the line. Do you have a dangling operator or " + ... + "unclosed parenthesis?" + newline; + str2 = ME.message; + elseif contains(ME.message,"integration or differentiation") + str0 = "Please compute the solution by hand. You can use the practice."; + str2 = ME.message; + elseif contains(ME.identifier,"MATLAB") + str0 = "Do you have missing * symbols? Check all your multiplications." + newline + ... + "Are you using MATLAB functions like exp(), cos(), sin(), sqrt(), and log()?" + newline + ... + "Are you properly using the carat command, ^, for powers like x^n?" ; + str2 = ME.message; + else + str2 = ME.message + newline + "Are you using MATLAB functions like " + ... + "exp(), cos(), sin(), sqrt(), and log()?" + newline + "Details matter."; + str0 = "Do you have missing * symbols? Check all your multiplications. " + ... + "Do all of your parentheses match?"; + end + app.FeedbackStatement.Text = str0 + newline + newline + str2; + app.FeedbackStatement.Interpreter = "latex"; + end + end + end + + + % Callbacks that handle component events + methods (Access = private) + + % Code that executes after component creation + function StartupFunction(app) + app.varOpts = ["x" "y" "z" "t" "r" "w"]; + app.showSoln = 1; + app.probOpts = "simpleDer"; + app.probType = "simpleDer"; + app.PolynomialFunctions.Value = 1; + app.TrigFunctions.Value = 1; + app.ExpLnFunctions.Value = 1; + app.funcOpts = [1 1 1]; % Poly, ExpLn, Trig allowed + app.simplederivativesCheckBox.Value = 1; + app.TabGroup.SelectedTab = app.SettingsTab; + app.SettingsMessage.Text = "Please select the desired problem types, variables, and solution display mode and then click " + ... + "'Practice Problems'."; + app.ProbStatement.Text = "Click the 'Generate Problem' button to create a new problem."; + app.SolutionEditField.Value = "Type your solution here as MATLAB code."; + app.lastFive = zeros(1,5); + app.solnChkAttempts = zeros(1,1); + app.errorCount = zeros(1,1); + app.generatedProbs = zeros(1,1); + app.numCorrect = zeros(1,1); + app.numResub = zeros(1,1); + app.newQuestionFlag = -1; + app.needNewQuesFlag = 0; + app.FeedbackStatement.Text = "Feedback on your solution displays here when you submit your solution."; + app.Warning.Text = "Warnings go here"; + app.SolPrompt.Text = "Solution Prompt"; + app.ProposedSolnLabel.Text = " "; + app.ProposedSoln.Text = "The 'Preview Solution' " + ... + "button will allow you to view your solution without checking."; + app.FeedbackStatement.Text = "When you are satisfied " + ... + "with your solution, click 'Submit Solution' to record your result." ... + + newline + "Feedback on your solution will display here." ... + + newline + newline + "When you have solved enough problems, select the " + ... + "'Analysis' tab to see how you are doing on each problem type."; + app.prevFuncType = 0; + % Set Font Size + app.ProbStatement.FontSize = 14; + app.SolutionEditField.FontSize = 14; + % Set colors +% app.PracticeProblemsTab.ForegroundColor = [0,0,0]; +% app.AnalysisTab.ForegroundColor = [0,0,0]; +% app.SettingsTab.ForegroundColor = [0,0,0]; +% app.GenerateProblemButton.BackgroundColor = [0,128,19]./255; +% app.SubmitSolutionButton.BackgroundColor = [0,75,135]./255; +% app.SubmitSolutionButton.FontColor = [1,1,1]; +% app.PreviewSolutionButton.BackgroundColor = [0,169,224]./255; +% app.PracticeMoreProblemsButton.BackgroundColor = [0,128,19]./255; +% app.ProblemTypesPanel.BackgroundColor = [119,48,186]./255; +% app.ProblemTypesPanel.ForegroundColor = [1,1,1]; +% app.VariableOptionsButtonGroup.BackgroundColor = [119,48,186]./255; +% app.VariableOptionsButtonGroup.ForegroundColor = [1,1,1]; +% app.xortButton.FontColor = [1,1,1]; +% app.variousButton.FontColor = [1,1,1]; +% app.ShowsolutionsButtonGroup.BackgroundColor = [119,48,186]./255; +% app.ShowsolutionsButtonGroup.ForegroundColor = [1,1,1]; +% app.NoButton.FontColor = [1,1,1]; +% app.YesButton.FontColor = [1,1,1]; +% app.ClearHistoryButton.BackgroundColor = [192,76,11]./255; +% app.ClearHistoryButton.FontColor = [1,1,1]; +% app.PracticeProblemsButton.BackgroundColor = [0,128,19]./255; +% app.PracticeMoreProblemsButton.FontColor = [1,1,1]; +% app.PracticeProblemsButton.FontColor = [1,1,1]; +% app.GenerateProblemButton.FontColor = [1,1,1]; +% app.ViewAnalysisButton.BackgroundColor = [237,177,32]./255; + end + + % Button pushed function: GenerateProblemButton + function GenerateProblemButtonPushed(app, event) + genProb(app) + idx = find(app.probOpts == app.probType); + app.generatedProbs(idx) = app.generatedProbs(idx)+1; + app.newQuestionFlag = 1; + app.SolutionEditField.Value = " "; + app.ProposedSolnLabel.Text = "My solution is " + app.SolPrompt.Text; + app.ProposedSoln.Text = "Preview your solution here"; + app.FeedbackStatement.Text = "Click 'Submit Solution' to record your results."; + end + + % Value changed function: allTypesCheckBox, + % ...and 10 other components + function setTypeOptions(app, event) + switch event.Source + case app.allTypesCheckBox + if event.Source.Value + app.allderivativesCheckBox.Value = 1; + app.powerrulelinearityDerCheckBox.Value = 1; + app.productruleDerCheckBox.Value = 1; + app.chainruleDerCheckBox.Value = 1; + app.simplederivativesCheckBox.Value = 1; + app.allintegralsCheckBox.Value = 1; + app.simpleintegralCheckBox.Value = 1; + app.definiteIntCheckBox.Value = 1; + app.substitutionIntCheckBox.Value = 1; + app.bypartsIntCheckBox.Value = 1; + for opt = ["powerDer" "prodDer" "chainDer" "simpleDer" ... + "simpleInt" "byPartsInt" "subsInt" "defInt"] + addType(app,opt) + end + app.PolynomialFunctions.Value = 1; + app.ExpLnFunctions.Value = 1; + FunctionsValueChanged(app,event.Source) + else + app.allderivativesCheckBox.Value = 0; + app.powerrulelinearityDerCheckBox.Value = 0; + app.productruleDerCheckBox.Value = 0; + app.chainruleDerCheckBox.Value = 0; + app.simplederivativesCheckBox.Value = 0; + app.allintegralsCheckBox.Value = 0; + app.simpleintegralCheckBox.Value = 0; + app.definiteIntCheckBox.Value = 0; + app.substitutionIntCheckBox.Value = 0; + app.bypartsIntCheckBox.Value = 0; + for opt = ["powerDer" "prodDer" "chainDer" "simpleDer" ... + "simpleInt" "byPartsInt" "subsInt" "defInt"] + removeType(app,opt) + end + end + case app.allderivativesCheckBox + if event.Source.Value + app.allderivativesCheckBox.Value = 1; + app.powerrulelinearityDerCheckBox.Value = 1; + app.productruleDerCheckBox.Value = 1; + app.chainruleDerCheckBox.Value = 1; + app.simplederivativesCheckBox.Value = 1; + for opt = ["powerDer" "prodDer" "chainDer" "simpleDer"] + addType(app,opt) + end + app.PolynomialFunctions.Value = 1; + FunctionsValueChanged(app,event.Source) + else + app.allderivativesCheckBox.Value = 0; + app.powerrulelinearityDerCheckBox.Value = 0; + app.productruleDerCheckBox.Value = 0; + app.chainruleDerCheckBox.Value = 0; + app.simplederivativesCheckBox.Value = 0; + for opt = ["powerDer" "prodDer" "chainDer" "simpleDer"] + removeType(app,opt) + end + end + case app.allintegralsCheckBox + if event.Source.Value + app.allintegralsCheckBox.Value = 1; + app.simpleintegralCheckBox.Value = 1; + app.definiteIntCheckBox.Value = 1; + app.substitutionIntCheckBox.Value = 1; + app.bypartsIntCheckBox.Value = 1; + for opt = ["simpleInt" "byPartsInt" "subsInt" "defInt"] + addType(app,opt) + end + app.PolynomialFunctions.Value = 1; + app.ExpLnFunctions.Value = 1; + FunctionsValueChanged(app,event.Source) + else + app.allintegralsCheckBox.Value = 0; + app.simpleintegralCheckBox.Value = 0; + app.definiteIntCheckBox.Value = 0; + app.substitutionIntCheckBox.Value = 0; + app.bypartsIntCheckBox.Value = 0; + for opt = ["simpleInt" "byPartsInt" "subsInt" "defInt"] + removeType(app,opt) + end + end + case app.powerrulelinearityDerCheckBox + if app.powerrulelinearityDerCheckBox.Value + addType(app,"powerDer") + else + removeType(app,"powerDer") + end + case app.simplederivativesCheckBox + if event.Source.Value + addType(app,"simpleDer") + else + removeType(app,"simpleDer") + end + case app.chainruleDerCheckBox + if event.Source.Value + addType(app,"chainDer") + else + removeType(app,"chainDer") + end + case app.productruleDerCheckBox + if event.Source.Value + addType(app,"prodDer") + else + removeType(app,"prodDer") + end + case app.definiteIntCheckBox + if event.Source.Value + addType(app,"defInt") + else + removeType(app,"defInt") + end + case app.bypartsIntCheckBox + if event.Source.Value + addType(app,"byPartsInt") + else + removeType(app,"byPartsInt") + end + case app.substitutionIntCheckBox + if event.Source.Value + addType(app,"subsInt") + else + removeType(app,"subsInt") + end + case app.simpleintegralCheckBox + if event.Source.Value + addType(app,"simpleInt") + else + removeType(app,"simpleInt") + end + end + + + end + + % Selection changed function: VariableOptionsButtonGroup + function setVarOpts(app, event) + selectedButton = app.VariableOptionsButtonGroup.SelectedObject; + if selectedButton == app.variousButton + app.varOpts = ["x" "y" "z" "t" "r" "w"]; + else + app.varOpts = ["x" "t"]; + end + end + + % Button pushed function: SubmitSolutionButton + function SubmitSolutionButtonPushed(app, event) + if app.newQuestionFlag == -1 + app.ProposedSoln.Text = "You must generate a problem before you can " + ... + "solve it."; + finished = 0; + else + finished = previewSolution(app); + end + if finished + idx = find(app.probOpts==app.probType,1); + app.recordResults = 1; + if app.newQuestionFlag == 1 + % Determine the correctness and update the Feedback + isCorrect = checkSolution(app); + else + app.numResub(idx) = app.numResub(idx)+1; + if app.showSoln == 1 + app.recordResults = 0; + end + isCorrect = checkSolution(app); + end + app.solnChkAttempts(idx) = app.solnChkAttempts(idx)+1; + app.newQuestionFlag = 0; + updateScoreRecords(app,isCorrect); + end + + end + + % Selection changed function: ShowsolutionsButtonGroup + function updateSolnsFlag(app, event) + selectedButton = app.ShowsolutionsButtonGroup.SelectedObject; + if selectedButton == app.NoButton + app.showSoln = 0; + else + app.showSoln = 1; + end + end + + % Button down function: PracticeProblemsTab + function practiceMoreProblems(app, event) + app.TabGroup.SelectedTab = app.PracticeProblemsTab; + if app.needNewQuesFlag == 1 && app.newQuestionFlag ~= -1 + GenerateProblemButtonPushed(app,[]) + end + end + + % Button down function: AnalysisTab + function AnalyzeResultsButtonPushed(app, event) + % Show components for analysis + app.TabGroup.SelectedTab = app.AnalysisTab; + % Set up plot + app.UIAxes.XLabel.String = "Problem Type"; + app.UIAxes.Title.String = "Success Rates By Problem Type"; + app.UIAxes.YLabel.String = "Percentage"; + app.UIAxes.XTick = 1:length(app.probOpts); + app.UIAxes.XTickLabel = app.probOpts; + app.UIAxes.YTick = 0:20:100; + app.UIAxes.YLim = [0 100]; + if app.showSoln == 1 + pctTypeCorrect = app.numCorrect./(app.generatedProbs)*100; + else + pctTypeCorrect = app.numCorrect./(app.generatedProbs+app.numResub)*100; + end + pctTypeCorrect(app.generatedProbs == 0) = 0; + bar(app.UIAxes,pctTypeCorrect) + % Set up table + lastCorrect = sum(app.lastFive,2)*20; + colNames = app.probOpts; + needPractice = app.probOpts; + for k = 1:length(app.probOpts) + colNames(k) = app.fullNames(3,find(app.fullNames(1,:)==app.probOpts(k))); + if app.generatedProbs(k) < 5 || (pctTypeCorrect(k) < 60 || lastCorrect(k) <= 3) + needPractice(k) = "Yes"; + elseif pctTypeCorrect(k) == 100 || (pctTypeCorrect(k) > 80 && lastCorrect(k) == 5) + needPractice(k) = "No"; + else + needPractice(k) = "Maybe"; + end + end + pctError = (app.errorCount./app.solnChkAttempts)*100; + pctError(app.solnChkAttempts == 0) = 0; + pctSkipped = ((app.generatedProbs + app.numResub) - (app.solnChkAttempts))./app.generatedProbs*100; + pctSkipped(app.generatedProbs == 0) = 0; + app.UITable.Data = array2table([app.generatedProbs';pctError';pctSkipped';needPractice; ... + lastCorrect']); + app.UITable.ColumnName = colNames; + app.UITable.RowName = ["Num. Generated" "% Incorrect" "% skipped" "Need practice?" ... + "% correct of last 5"]; + % Set up textual feedback + createAnalysisFeedbackText(app) + end + + % Button pushed function: PreviewSolutionButton + function PreviewSolutionButtonPushed(app, event) + if app.newQuestionFlag == -1 + app.ProposedSoln.Text = "You must generate a problem before you can solve it."; + else + previewSolution(app); + end + end + + % Button pushed function: ClearHistoryButton + function ClearHistoryButtonPushed(app, event) + app.errorCount = zeros(size(app.errorCount)); + app.lastFive = zeros(size(app.lastFive)); + app.solnChkAttempts = zeros(size(app.solnChkAttempts)); + app.generatedProbs = zeros(size(app.generatedProbs)); + app.numCorrect = zeros(size(app.numCorrect)); + AnalyzeResultsButtonPushed(app,[]) + end + + % Value changed function: ExpLnFunctions, PolynomialFunctions, + % ...and 1 other component + function FunctionsValueChanged(app, event) + NewPolyValue = app.PolynomialFunctions.Value; + NewExpLnValue = app.ExpLnFunctions.Value; + NewTrigValue = app.TrigFunctions.Value; + + if any([NewPolyValue NewExpLnValue NewTrigValue]) + app.funcOpts = [NewPolyValue NewExpLnValue NewTrigValue]; + else + app.SettingsMessage.Text = "You must choose at least one type of function."; + app.PolynomialFunctions.Value = true; + app.funcOpts = [1 0 0]; + end + + end + end + + % Component initialization + methods (Access = private) + + % Create UIFigure and components + function createComponents(app) + + % Create CalculusFlashcardsAppUIFigure and hide until all components are created + app.CalculusFlashcardsAppUIFigure = uifigure('Visible', 'off'); + app.CalculusFlashcardsAppUIFigure.Position = [100 100 818 600]; + app.CalculusFlashcardsAppUIFigure.Name = 'Calculus Flashcards App'; + + % Create GridLayout + app.GridLayout = uigridlayout(app.CalculusFlashcardsAppUIFigure); + app.GridLayout.ColumnWidth = {'1x'}; + app.GridLayout.RowHeight = {'1x'}; + + % Create TabGroup + app.TabGroup = uitabgroup(app.GridLayout); + app.TabGroup.Layout.Row = 1; + app.TabGroup.Layout.Column = 1; + + % Create SettingsTab + app.SettingsTab = uitab(app.TabGroup); + app.SettingsTab.Title = 'Settings'; + + % Create GridLayout12 + app.GridLayout12 = uigridlayout(app.SettingsTab); + app.GridLayout12.ColumnWidth = {'1x'}; + app.GridLayout12.RowHeight = {'1x', '1x', '4x'}; + + % Create ProblemTypesPanel + app.ProblemTypesPanel = uipanel(app.GridLayout12); + app.ProblemTypesPanel.TitlePosition = 'centertop'; + app.ProblemTypesPanel.Title = 'Problem Types'; + app.ProblemTypesPanel.Layout.Row = 3; + app.ProblemTypesPanel.Layout.Column = 1; + app.ProblemTypesPanel.FontWeight = 'bold'; + app.ProblemTypesPanel.FontSize = 16; + + % Create GridLayout13 + app.GridLayout13 = uigridlayout(app.ProblemTypesPanel); + app.GridLayout13.ColumnWidth = {'1x', '1x', '1x'}; + app.GridLayout13.RowHeight = {'1x'}; + + % Create DerivativesPanel + app.DerivativesPanel = uipanel(app.GridLayout13); + app.DerivativesPanel.TitlePosition = 'centertop'; + app.DerivativesPanel.Title = 'Derivatives'; + app.DerivativesPanel.Layout.Row = 1; + app.DerivativesPanel.Layout.Column = 1; + app.DerivativesPanel.FontWeight = 'bold'; + app.DerivativesPanel.FontSize = 14; + + % Create allderivativesCheckBox + app.allderivativesCheckBox = uicheckbox(app.DerivativesPanel); + app.allderivativesCheckBox.ValueChangedFcn = createCallbackFcn(app, @setTypeOptions, true); + app.allderivativesCheckBox.Text = 'All derivatives'; + app.allderivativesCheckBox.Position = [55 224 96 22]; + + % Create productruleDerCheckBox + app.productruleDerCheckBox = uicheckbox(app.DerivativesPanel); + app.productruleDerCheckBox.ValueChangedFcn = createCallbackFcn(app, @setTypeOptions, true); + app.productruleDerCheckBox.Text = 'Product Rule'; + app.productruleDerCheckBox.Position = [55 7 91 22]; + + % Create simplederivativesCheckBox + app.simplederivativesCheckBox = uicheckbox(app.DerivativesPanel); + app.simplederivativesCheckBox.ValueChangedFcn = createCallbackFcn(app, @setTypeOptions, true); + app.simplederivativesCheckBox.Text = 'Derivatives of Functions'; + app.simplederivativesCheckBox.Position = [55 148 150 22]; + + % Create chainruleDerCheckBox + app.chainruleDerCheckBox = uicheckbox(app.DerivativesPanel); + app.chainruleDerCheckBox.ValueChangedFcn = createCallbackFcn(app, @setTypeOptions, true); + app.chainruleDerCheckBox.Text = 'Chain Rule'; + app.chainruleDerCheckBox.Position = [55 54 81 22]; + + % Create powerrulelinearityDerCheckBox + app.powerrulelinearityDerCheckBox = uicheckbox(app.DerivativesPanel); + app.powerrulelinearityDerCheckBox.ValueChangedFcn = createCallbackFcn(app, @setTypeOptions, true); + app.powerrulelinearityDerCheckBox.Text = 'Power and Linearity Rules'; + app.powerrulelinearityDerCheckBox.WordWrap = 'on'; + app.powerrulelinearityDerCheckBox.Position = [55 101 165 22]; + + % Create IntegralsPanel + app.IntegralsPanel = uipanel(app.GridLayout13); + app.IntegralsPanel.TitlePosition = 'centertop'; + app.IntegralsPanel.Title = 'Integrals'; + app.IntegralsPanel.Layout.Row = 1; + app.IntegralsPanel.Layout.Column = 3; + app.IntegralsPanel.FontWeight = 'bold'; + app.IntegralsPanel.FontSize = 14; + + % Create allintegralsCheckBox + app.allintegralsCheckBox = uicheckbox(app.IntegralsPanel); + app.allintegralsCheckBox.ValueChangedFcn = createCallbackFcn(app, @setTypeOptions, true); + app.allintegralsCheckBox.Text = 'All integrals'; + app.allintegralsCheckBox.Position = [57 224 84 22]; + + % Create bypartsIntCheckBox + app.bypartsIntCheckBox = uicheckbox(app.IntegralsPanel); + app.bypartsIntCheckBox.ValueChangedFcn = createCallbackFcn(app, @setTypeOptions, true); + app.bypartsIntCheckBox.Text = 'Integration by Parts'; + app.bypartsIntCheckBox.Position = [54 7 126 22]; + + % Create simpleintegralCheckBox + app.simpleintegralCheckBox = uicheckbox(app.IntegralsPanel); + app.simpleintegralCheckBox.ValueChangedFcn = createCallbackFcn(app, @setTypeOptions, true); + app.simpleintegralCheckBox.Text = 'Integrals of Functions'; + app.simpleintegralCheckBox.Position = [54 148 137 22]; + + % Create substitutionIntCheckBox + app.substitutionIntCheckBox = uicheckbox(app.IntegralsPanel); + app.substitutionIntCheckBox.ValueChangedFcn = createCallbackFcn(app, @setTypeOptions, true); + app.substitutionIntCheckBox.Text = 'Substitution'; + app.substitutionIntCheckBox.Position = [54 54 85 22]; + + % Create definiteIntCheckBox + app.definiteIntCheckBox = uicheckbox(app.IntegralsPanel); + app.definiteIntCheckBox.ValueChangedFcn = createCallbackFcn(app, @setTypeOptions, true); + app.definiteIntCheckBox.Text = 'Definite Integrals'; + app.definiteIntCheckBox.WordWrap = 'on'; + app.definiteIntCheckBox.Position = [54 101 165 22]; + + % Create GridLayout14 + app.GridLayout14 = uigridlayout(app.GridLayout13); + app.GridLayout14.ColumnWidth = {'1x'}; + app.GridLayout14.RowHeight = {'1x', '1x', '1x'}; + app.GridLayout14.Layout.Row = 1; + app.GridLayout14.Layout.Column = 2; + + % Create RandomizePanel + app.RandomizePanel = uipanel(app.GridLayout14); + app.RandomizePanel.TitlePosition = 'centertop'; + app.RandomizePanel.Title = 'Randomize'; + app.RandomizePanel.Layout.Row = 1; + app.RandomizePanel.Layout.Column = 1; + app.RandomizePanel.FontWeight = 'bold'; + app.RandomizePanel.FontSize = 14; + + % Create allTypesCheckBox + app.allTypesCheckBox = uicheckbox(app.RandomizePanel); + app.allTypesCheckBox.ValueChangedFcn = createCallbackFcn(app, @setTypeOptions, true); + app.allTypesCheckBox.Text = 'All derivatives and integrals'; + app.allTypesCheckBox.Position = [28 23 168 22]; + + % Create FunctionTypesPanel + app.FunctionTypesPanel = uipanel(app.GridLayout14); + app.FunctionTypesPanel.TitlePosition = 'centertop'; + app.FunctionTypesPanel.Title = 'Function Types'; + app.FunctionTypesPanel.Layout.Row = [2 3]; + app.FunctionTypesPanel.Layout.Column = 1; + app.FunctionTypesPanel.FontWeight = 'bold'; + app.FunctionTypesPanel.FontSize = 14; + + % Create PolynomialFunctions + app.PolynomialFunctions = uicheckbox(app.FunctionTypesPanel); + app.PolynomialFunctions.ValueChangedFcn = createCallbackFcn(app, @FunctionsValueChanged, true); + app.PolynomialFunctions.Text = 'Polynomials'; + app.PolynomialFunctions.Position = [28 119 87 22]; + + % Create ExpLnFunctions + app.ExpLnFunctions = uicheckbox(app.FunctionTypesPanel); + app.ExpLnFunctions.ValueChangedFcn = createCallbackFcn(app, @FunctionsValueChanged, true); + app.ExpLnFunctions.Text = 'Exponentials and logarithms'; + app.ExpLnFunctions.Position = [28 76 173 22]; + + % Create TrigFunctions + app.TrigFunctions = uicheckbox(app.FunctionTypesPanel); + app.TrigFunctions.ValueChangedFcn = createCallbackFcn(app, @FunctionsValueChanged, true); + app.TrigFunctions.Text = 'Trigonometric functions'; + app.TrigFunctions.Position = [28 32 146 22]; + + % Create GridLayout18 + app.GridLayout18 = uigridlayout(app.GridLayout12); + app.GridLayout18.RowHeight = {'1x'}; + app.GridLayout18.Layout.Row = 1; + app.GridLayout18.Layout.Column = 1; + + % Create VariableOptionsButtonGroup + app.VariableOptionsButtonGroup = uibuttongroup(app.GridLayout18); + app.VariableOptionsButtonGroup.SelectionChangedFcn = createCallbackFcn(app, @setVarOpts, true); + app.VariableOptionsButtonGroup.TitlePosition = 'centertop'; + app.VariableOptionsButtonGroup.Title = 'Variable Options'; + app.VariableOptionsButtonGroup.Layout.Row = 1; + app.VariableOptionsButtonGroup.Layout.Column = 1; + app.VariableOptionsButtonGroup.FontWeight = 'bold'; + app.VariableOptionsButtonGroup.FontSize = 14; + + % Create variousButton + app.variousButton = uiradiobutton(app.VariableOptionsButtonGroup); + app.variousButton.Text = 'various'; + app.variousButton.Position = [76 10 61 22]; + app.variousButton.Value = true; + + % Create xortButton + app.xortButton = uiradiobutton(app.VariableOptionsButtonGroup); + app.xortButton.Text = 'x or t'; + app.xortButton.Position = [245 10 65 22]; + + % Create ShowsolutionsButtonGroup + app.ShowsolutionsButtonGroup = uibuttongroup(app.GridLayout18); + app.ShowsolutionsButtonGroup.SelectionChangedFcn = createCallbackFcn(app, @updateSolnsFlag, true); + app.ShowsolutionsButtonGroup.TitlePosition = 'centertop'; + app.ShowsolutionsButtonGroup.Title = 'Show solutions after submission?'; + app.ShowsolutionsButtonGroup.Layout.Row = 1; + app.ShowsolutionsButtonGroup.Layout.Column = 2; + app.ShowsolutionsButtonGroup.FontWeight = 'bold'; + app.ShowsolutionsButtonGroup.FontSize = 14; + + % Create YesButton + app.YesButton = uiradiobutton(app.ShowsolutionsButtonGroup); + app.YesButton.Text = 'Yes'; + app.YesButton.Position = [104 10 58 22]; + app.YesButton.Value = true; + + % Create NoButton + app.NoButton = uiradiobutton(app.ShowsolutionsButtonGroup); + app.NoButton.Text = 'No'; + app.NoButton.Position = [217 10 65 22]; + + % Create GridLayout22 + app.GridLayout22 = uigridlayout(app.GridLayout12); + app.GridLayout22.ColumnWidth = {'1x'}; + app.GridLayout22.RowHeight = {'1x'}; + app.GridLayout22.Layout.Row = 2; + app.GridLayout22.Layout.Column = 1; + + % Create SettingsMessage + app.SettingsMessage = uilabel(app.GridLayout22); + app.SettingsMessage.HorizontalAlignment = 'center'; + app.SettingsMessage.Layout.Row = 1; + app.SettingsMessage.Layout.Column = 1; + + % Create PracticeProblemsTab + app.PracticeProblemsTab = uitab(app.TabGroup); + app.PracticeProblemsTab.Title = 'Practice Problems'; + app.PracticeProblemsTab.ButtonDownFcn = createCallbackFcn(app, @practiceMoreProblems, true); + + % Create GridLayout2 + app.GridLayout2 = uigridlayout(app.PracticeProblemsTab); + app.GridLayout2.ColumnWidth = {'1x'}; + app.GridLayout2.RowHeight = {'1x'}; + + % Create GridLayout3 + app.GridLayout3 = uigridlayout(app.GridLayout2); + app.GridLayout3.ColumnWidth = {95, '1x'}; + app.GridLayout3.RowHeight = {'2x', '1x', '3x'}; + app.GridLayout3.Layout.Row = 1; + app.GridLayout3.Layout.Column = 1; + + % Create GridLayout4 + app.GridLayout4 = uigridlayout(app.GridLayout3); + app.GridLayout4.ColumnWidth = {'1x'}; + app.GridLayout4.RowHeight = {'0.2x', '2x', '2x'}; + app.GridLayout4.Layout.Row = 1; + app.GridLayout4.Layout.Column = 1; + + % Create GenerateProblemButton + app.GenerateProblemButton = uibutton(app.GridLayout4, 'push'); + app.GenerateProblemButton.ButtonPushedFcn = createCallbackFcn(app, @GenerateProblemButtonPushed, true); + app.GenerateProblemButton.WordWrap = 'on'; + app.GenerateProblemButton.Layout.Row = 2; + app.GenerateProblemButton.Layout.Column = 1; + app.GenerateProblemButton.Text = 'Generate Problem'; + + % Create GridLayout5 + app.GridLayout5 = uigridlayout(app.GridLayout3); + app.GridLayout5.ColumnWidth = {'1x'}; + app.GridLayout5.RowHeight = {'2x', '1x'}; + app.GridLayout5.Layout.Row = 1; + app.GridLayout5.Layout.Column = 2; + + % Create ProbStatement + app.ProbStatement = uilabel(app.GridLayout5); + app.ProbStatement.HorizontalAlignment = 'center'; + app.ProbStatement.Layout.Row = 1; + app.ProbStatement.Layout.Column = 1; + app.ProbStatement.Interpreter = 'latex'; + app.ProbStatement.Text = 'Problem statement goes here'; + + % Create Warning + app.Warning = uilabel(app.GridLayout5); + app.Warning.HorizontalAlignment = 'center'; + app.Warning.WordWrap = 'on'; + app.Warning.Layout.Row = 2; + app.Warning.Layout.Column = 1; + app.Warning.Interpreter = 'latex'; + app.Warning.Text = 'Warnings go here'; + + % Create GridLayout6 + app.GridLayout6 = uigridlayout(app.GridLayout3); + app.GridLayout6.ColumnWidth = {170, '1x'}; + app.GridLayout6.RowHeight = {'1x'}; + app.GridLayout6.Layout.Row = 2; + app.GridLayout6.Layout.Column = 2; + + % Create SolutionEditField + app.SolutionEditField = uieditfield(app.GridLayout6, 'text'); + app.SolutionEditField.Layout.Row = 1; + app.SolutionEditField.Layout.Column = 2; + + % Create SolPrompt + app.SolPrompt = uilabel(app.GridLayout6); + app.SolPrompt.HorizontalAlignment = 'right'; + app.SolPrompt.Layout.Row = 1; + app.SolPrompt.Layout.Column = 1; + app.SolPrompt.Interpreter = 'latex'; + app.SolPrompt.Text = 'Label2'; + + % Create GridLayout7 + app.GridLayout7 = uigridlayout(app.GridLayout3); + app.GridLayout7.ColumnWidth = {'1x'}; + app.GridLayout7.RowHeight = {'0.1x', '1x', '1.1x', '1x', '1x'}; + app.GridLayout7.Layout.Row = 3; + app.GridLayout7.Layout.Column = 1; + + % Create SubmitSolutionButton + app.SubmitSolutionButton = uibutton(app.GridLayout7, 'push'); + app.SubmitSolutionButton.ButtonPushedFcn = createCallbackFcn(app, @SubmitSolutionButtonPushed, true); + app.SubmitSolutionButton.WordWrap = 'on'; + app.SubmitSolutionButton.Layout.Row = 4; + app.SubmitSolutionButton.Layout.Column = 1; + app.SubmitSolutionButton.Text = 'Submit Solution'; + + % Create PreviewSolutionButton + app.PreviewSolutionButton = uibutton(app.GridLayout7, 'push'); + app.PreviewSolutionButton.ButtonPushedFcn = createCallbackFcn(app, @PreviewSolutionButtonPushed, true); + app.PreviewSolutionButton.WordWrap = 'on'; + app.PreviewSolutionButton.Layout.Row = 2; + app.PreviewSolutionButton.Layout.Column = 1; + app.PreviewSolutionButton.Text = 'Preview Solution'; + + % Create GridLayout15 + app.GridLayout15 = uigridlayout(app.GridLayout3); + app.GridLayout15.ColumnWidth = {'1x'}; + app.GridLayout15.RowHeight = {'1x', '9x', '1x'}; + app.GridLayout15.Layout.Row = 2; + app.GridLayout15.Layout.Column = 1; + + % Create GridLayout16 + app.GridLayout16 = uigridlayout(app.GridLayout3); + app.GridLayout16.ColumnWidth = {'1x'}; + app.GridLayout16.RowHeight = {'1x', '2x'}; + app.GridLayout16.Layout.Row = 3; + app.GridLayout16.Layout.Column = 2; + + % Create GridLayout17 + app.GridLayout17 = uigridlayout(app.GridLayout16); + app.GridLayout17.ColumnWidth = {160, '4x'}; + app.GridLayout17.RowHeight = {'1x'}; + app.GridLayout17.Layout.Row = 1; + app.GridLayout17.Layout.Column = 1; + + % Create ProposedSolnLabel + app.ProposedSolnLabel = uilabel(app.GridLayout17); + app.ProposedSolnLabel.HorizontalAlignment = 'right'; + app.ProposedSolnLabel.Layout.Row = 1; + app.ProposedSolnLabel.Layout.Column = 1; + app.ProposedSolnLabel.Interpreter = 'latex'; + app.ProposedSolnLabel.Text = 'Proposed Soln Label'; + + % Create ProposedSoln + app.ProposedSoln = uilabel(app.GridLayout17); + app.ProposedSoln.WordWrap = 'on'; + app.ProposedSoln.Layout.Row = 1; + app.ProposedSoln.Layout.Column = 2; + app.ProposedSoln.Interpreter = 'latex'; + app.ProposedSoln.Text = 'Proposed Solution'; + + % Create FeedbackStatement + app.FeedbackStatement = uilabel(app.GridLayout16); + app.FeedbackStatement.WordWrap = 'on'; + app.FeedbackStatement.Layout.Row = 2; + app.FeedbackStatement.Layout.Column = 1; + app.FeedbackStatement.Interpreter = 'latex'; + app.FeedbackStatement.Text = 'Feedback Statement'; + + % Create AnalysisTab + app.AnalysisTab = uitab(app.TabGroup); + app.AnalysisTab.Title = 'Analysis'; + app.AnalysisTab.ButtonDownFcn = createCallbackFcn(app, @AnalyzeResultsButtonPushed, true); + + % Create GridLayout19 + app.GridLayout19 = uigridlayout(app.AnalysisTab); + app.GridLayout19.ColumnWidth = {'1x'}; + app.GridLayout19.RowHeight = {161, '1.5x', '1x'}; + + % Create UIAxes + app.UIAxes = uiaxes(app.GridLayout19); + title(app.UIAxes, 'Title') + xlabel(app.UIAxes, 'X') + ylabel(app.UIAxes, 'Y') + zlabel(app.UIAxes, 'Z') + app.UIAxes.Layout.Row = 3; + app.UIAxes.Layout.Column = 1; + + % Create UITable + app.UITable = uitable(app.GridLayout19); + app.UITable.ColumnName = {'Column 1'; 'Column 2'; 'Column 3'; 'Column 4'}; + app.UITable.RowName = {}; + app.UITable.Layout.Row = 1; + app.UITable.Layout.Column = 1; + + % Create GridLayout20 + app.GridLayout20 = uigridlayout(app.GridLayout19); + app.GridLayout20.ColumnWidth = {'1x', 100}; + app.GridLayout20.RowHeight = {'1x'}; + app.GridLayout20.Layout.Row = 2; + app.GridLayout20.Layout.Column = 1; + + % Create GridLayout23 + app.GridLayout23 = uigridlayout(app.GridLayout20); + app.GridLayout23.ColumnWidth = {'1x'}; + app.GridLayout23.RowHeight = {'1x', '1x', '1x'}; + app.GridLayout23.Layout.Row = 1; + app.GridLayout23.Layout.Column = 2; + + % Create ClearHistoryButton + app.ClearHistoryButton = uibutton(app.GridLayout23, 'push'); + app.ClearHistoryButton.ButtonPushedFcn = createCallbackFcn(app, @ClearHistoryButtonPushed, true); + app.ClearHistoryButton.Layout.Row = 2; + app.ClearHistoryButton.Layout.Column = 1; + app.ClearHistoryButton.Text = 'Clear History'; + + % Create GridLayout24 + app.GridLayout24 = uigridlayout(app.GridLayout20); + app.GridLayout24.ColumnWidth = {'0.5x', '10x', '0.5x'}; + app.GridLayout24.RowHeight = {'1x'}; + app.GridLayout24.Layout.Row = 1; + app.GridLayout24.Layout.Column = 1; + + % Create AnalysisFeedback + app.AnalysisFeedback = uilabel(app.GridLayout24); + app.AnalysisFeedback.WordWrap = 'on'; + app.AnalysisFeedback.Layout.Row = 1; + app.AnalysisFeedback.Layout.Column = 2; + app.AnalysisFeedback.Interpreter = 'latex'; + app.AnalysisFeedback.Text = 'Analysis Feedback'; + + % Show the figure after all components are created + app.CalculusFlashcardsAppUIFigure.Visible = 'on'; + end + end + + % App creation and deletion + methods (Access = public) + + % Construct app + function app = CalculusFlashcardsApp + + % Create UIFigure and components + createComponents(app) + + % Register the app with App Designer + registerApp(app, app.CalculusFlashcardsAppUIFigure) + + % Execute the startup function + runStartupFcn(app, @StartupFunction) + + if nargout == 0 + clear app + end + end + + % Code that executes before app deletion + function delete(app) + + % Delete UIFigure when app is deleted + delete(app.CalculusFlashcardsAppUIFigure) + end + end +end \ No newline at end of file diff --git a/Images/AreaUnderCurve.png b/Images/AreaUnderCurve.png index 45e0edb..7f2c02a 100644 Binary files a/Images/AreaUnderCurve.png and b/Images/AreaUnderCurve.png differ diff --git a/Images/CalcFlashcardsAnalysis.png b/Images/CalcFlashcardsAnalysis.png index 8b67955..60f3962 100644 Binary files a/Images/CalcFlashcardsAnalysis.png and b/Images/CalcFlashcardsAnalysis.png differ diff --git a/Images/CalcFlashcardsPractice.png b/Images/CalcFlashcardsPractice.png index 7f2d220..acf392e 100644 Binary files a/Images/CalcFlashcardsPractice.png and b/Images/CalcFlashcardsPractice.png differ diff --git a/Images/CalcFlashcardsSettings.png b/Images/CalcFlashcardsSettings.png index f9a6ee5..50d16ff 100644 Binary files a/Images/CalcFlashcardsSettings.png and b/Images/CalcFlashcardsSettings.png differ diff --git a/Images/FTC-generated.png b/Images/FTC-generated.png index c3f089f..2ec60de 100644 Binary files a/Images/FTC-generated.png and b/Images/FTC-generated.png differ diff --git a/Images/IBP.png b/Images/IBP.png index a7e5b6e..88af444 100644 Binary files a/Images/IBP.png and b/Images/IBP.png differ diff --git a/Images/Ski-Area.png b/Images/Ski-Area.png index dbbed00..4dedf4f 100644 Binary files a/Images/Ski-Area.png and b/Images/Ski-Area.png differ diff --git a/Images/SubstIm.png b/Images/SubstIm.png index 6edd80f..a1da0af 100644 Binary files a/Images/SubstIm.png and b/Images/SubstIm.png differ diff --git a/Images/adf.png b/Images/adf.png index eb74829..b153697 100644 Binary files a/Images/adf.png and b/Images/adf.png differ diff --git a/Images/animSolar.gif b/Images/animSolar.gif index ad86a9d..3741b26 100644 Binary files a/Images/animSolar.gif and b/Images/animSolar.gif differ diff --git a/Images/animSubst.gif b/Images/animSubst.gif index e0d6cf2..0f0c777 100644 Binary files a/Images/animSubst.gif and b/Images/animSubst.gif differ diff --git a/Images/family.gif b/Images/family.gif index ebdf7fe..6df8bbd 100644 Binary files a/Images/family.gif and b/Images/family.gif differ diff --git a/Images/ibp-generated.png b/Images/ibp-generated.png index 459e943..f8fc43b 100644 Binary files a/Images/ibp-generated.png and b/Images/ibp-generated.png differ diff --git a/InstructorResources/Solutions/AntiderivativesPracticeSoln.mlx b/InstructorResources/Solutions/AntiderivativesPracticeSoln.mlx new file mode 100644 index 0000000..411fb76 Binary files /dev/null and b/InstructorResources/Solutions/AntiderivativesPracticeSoln.mlx differ diff --git a/InstructorResources/Solutions/AntiderivativesSoln.mlx b/InstructorResources/Solutions/AntiderivativesSoln.mlx new file mode 100644 index 0000000..0a37ea1 Binary files /dev/null and b/InstructorResources/Solutions/AntiderivativesSoln.mlx differ diff --git a/InstructorResources/Solutions/AntiderivativesVizSoln.mlx b/InstructorResources/Solutions/AntiderivativesVizSoln.mlx new file mode 100644 index 0000000..a54674c Binary files /dev/null and b/InstructorResources/Solutions/AntiderivativesVizSoln.mlx differ diff --git a/InstructorResources/Solutions/ByPartsPracticeSoln.mlx b/InstructorResources/Solutions/ByPartsPracticeSoln.mlx new file mode 100644 index 0000000..dccb33c Binary files /dev/null and b/InstructorResources/Solutions/ByPartsPracticeSoln.mlx differ diff --git a/InstructorResources/Solutions/ByPartsSoln.mlx b/InstructorResources/Solutions/ByPartsSoln.mlx new file mode 100644 index 0000000..77e93de Binary files /dev/null and b/InstructorResources/Solutions/ByPartsSoln.mlx differ diff --git a/InstructorResources/Solutions/ByPartsVizSoln.mlx b/InstructorResources/Solutions/ByPartsVizSoln.mlx new file mode 100644 index 0000000..f01c6f9 Binary files /dev/null and b/InstructorResources/Solutions/ByPartsVizSoln.mlx differ diff --git a/InstructorResources/Solutions/FundamentalTheoremPracticeSoln.mlx b/InstructorResources/Solutions/FundamentalTheoremPracticeSoln.mlx new file mode 100644 index 0000000..c962ae6 Binary files /dev/null and b/InstructorResources/Solutions/FundamentalTheoremPracticeSoln.mlx differ diff --git a/InstructorResources/Solutions/FundamentalTheoremSoln.mlx b/InstructorResources/Solutions/FundamentalTheoremSoln.mlx new file mode 100644 index 0000000..aa41a60 Binary files /dev/null and b/InstructorResources/Solutions/FundamentalTheoremSoln.mlx differ diff --git a/InstructorResources/Solutions/FundamentalTheoremVizSoln.mlx b/InstructorResources/Solutions/FundamentalTheoremVizSoln.mlx new file mode 100644 index 0000000..e167602 Binary files /dev/null and b/InstructorResources/Solutions/FundamentalTheoremVizSoln.mlx differ diff --git a/InstructorResources/Solutions/RiemannSoln.mlx b/InstructorResources/Solutions/RiemannSoln.mlx new file mode 100644 index 0000000..5b883a7 Binary files /dev/null and b/InstructorResources/Solutions/RiemannSoln.mlx differ diff --git a/InstructorResources/Solutions/RiemannVizSoln.mlx b/InstructorResources/Solutions/RiemannVizSoln.mlx new file mode 100644 index 0000000..f3bfe4e Binary files /dev/null and b/InstructorResources/Solutions/RiemannVizSoln.mlx differ diff --git a/InstructorResources/Solutions/ScriptTemplateSoln.mlx b/InstructorResources/Solutions/ScriptTemplateSoln.mlx new file mode 100644 index 0000000..a803a78 Binary files /dev/null and b/InstructorResources/Solutions/ScriptTemplateSoln.mlx differ diff --git a/InstructorResources/Solutions/SubstitutionPracticeSoln.mlx b/InstructorResources/Solutions/SubstitutionPracticeSoln.mlx new file mode 100644 index 0000000..32dfbc6 Binary files /dev/null and b/InstructorResources/Solutions/SubstitutionPracticeSoln.mlx differ diff --git a/InstructorResources/Solutions/SubstitutionSoln.mlx b/InstructorResources/Solutions/SubstitutionSoln.mlx new file mode 100644 index 0000000..391b347 Binary files /dev/null and b/InstructorResources/Solutions/SubstitutionSoln.mlx differ diff --git a/InstructorResources/Solutions/SubstitutionVizSoln.mlx b/InstructorResources/Solutions/SubstitutionVizSoln.mlx new file mode 100644 index 0000000..e9d9ba7 Binary files /dev/null and b/InstructorResources/Solutions/SubstitutionVizSoln.mlx differ diff --git a/README.md b/README.md index 87918c3..3a9e458 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,14 @@ + # Calculus \- Integrals [![View on File Exchange](https://www.mathworks.com/matlabcentral/images/matlab-file-exchange.svg)](https://www.mathworks.com/matlabcentral/fileexchange/105740-calculus-integrals) or [![Open in MATLAB Online](https://www.mathworks.com/images/responsive/global/open-in-matlab-online.svg)](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=README.mlx) -![MATLAB Versions Tested](https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2FMathWorks-Teaching-Resources%2FCalculus-Integrals%2Frelease%2FImages%2FTestedWith.json) +[![MATLAB Versions Tested](https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2FMathWorks-Teaching-Resources%2FCalculus-Integrals%2Frelease%2FImages%2FTestedWith.json)](https://MathWorks-Teaching-Resources.github.io/Calculus-Integrals) **Curriculum Module** -_Created with R2021b. Compatible with R2021b and later releases._ +_Created with R2024a. Compatible with R2024a and later releases._ # Information @@ -15,10 +16,10 @@ This curriculum module contains interactive [MATLABĀ® live scripts](https://www. ## Background -You can use these live scripts as [demonstrations](#H_9AAE657C) in lectures, class activities, or interactive assignments outside of class. Calculus \- Integrals covers Riemann sum approximations to definite integrals, indefinite integrals as antiderivatives, and the fundamental theorem of calculus. It also covers the indefinite integrals of powers, exponentials, natural logarithms, sines, and cosines as well as substitution and integration by parts. Applications include area and power. In addition to the full scripts, visualizations, and practice scripts there is a [Calculus Flashcards app](#H_1F9459BC) included as well. +You can use these live scripts as demonstrations in lectures, class activities, or interactive assignments outside of class. Calculus \- Integrals covers Riemann sum approximations to definite integrals, indefinite integrals as antiderivatives, and the fundamental theorem of calculus. It also covers the indefinite integrals of powers, exponentials, natural logarithms, sines, and cosines as well as substitution and integration by parts. Applications include area and power. In addition to the full scripts, visualizations, and practice scripts there is a Calculus Flashcards app included as well. -The instructions inside the live scripts will guide you through the exercises and activities. Get started with each live script by running it one section at a time. To stop running the script or a section midway (for example, when an animation is in progress), use the End icon Stop button in the **RUN** section of the **Live Editor** tab in the MATLAB Toolstrip. +The instructions inside the live scripts will guide you through the exercises and activities. Get started with each live script by running it one section at a time. To stop running the script or a section midway (for example, when an animation is in progress), use the EndIcon.png Stop button in the **RUN** section of the **Live Editor** tab in the MATLAB Toolstrip. Looking for more? Find an issue? Have a suggestion? Please contact the [MathWorks online teaching team](mailto:%20onlineteaching@mathworks.com). @@ -27,48 +28,47 @@ Looking for more? Find an issue? Have a suggestion? Please contact the [MathWork Solutions are available upon instructor request. Contact the [MathWorks teaching resources team](mailto:onlineteaching@mathworks.com) if you would like to request solutions, provide feedback, or if you have a question. - ## Prerequisites -This module assumes a knowledge of functions that is standard in precalculus course materials regarding powers, exponentials, absolute values, logarithms, sines, cosines, rational functions, and asymptotes. It also assumes knowledge of basic area formulas, including the area of a trapezoid. With the exception of Riemann.mlx and RiemannViz.mlx, the scripts are written to follow [Calculus\-Derivatives](https://github.com/MathWorks-Teaching-Resources/Calculus-Derivatives) and expect basic understanding of derivatives and derivative rules. There is little expectation of familiarity with MATLAB, but you could use [MATLAB Onramp](https://matlabacademy.mathworks.com/details/matlab-onramp/gettingstarted) as another resource to acquire familiarity with MATLAB. +This module assumes a knowledge of functions that is standard in precalculus course materials regarding powers, exponentials, absolute values, logarithms, sines, cosines, rational functions, and asymptotes. It also assumes knowledge of basic area formulas, including the area of a trapezoid. With the exception of Riemann.mlx and RiemannViz.mlx, the scripts are written to follow [Calculus\-Derivatives](https://www.mathworks.com/matlabcentral/fileexchange/99249-calculus-derivatives) and expect basic understanding of derivatives and derivative rules. There is little expectation of familiarity with MATLAB, but you could use [MATLAB Onramp](https://matlabacademy.mathworks.com/details/matlab-onramp/gettingstarted) as another resource to acquire familiarity with MATLAB. - ## Getting Started ### Accessing the Module ### **On MATLAB Online:** -Use the [Open in MATLAB Online](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj) link to download the module. You will be prompted to log in or create a MathWorks account. The project will be loaded, and you will see an app with several navigation options to get you started. +Use the [OpenInMO.png](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj) link to download the module. You will be prompted to log in or create a MathWorks account. The project will be loaded, and you will see an app with several navigation options to get you started. ### **On Desktop:** -Download or clone this repository. Open MATLAB, navigate to the folder containing these scripts and double\-click on [Integrals.prj](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj). It will add the appropriate files to your MATLAB path and open an app that asks you where you would like to start. +Download or clone this repository. Open MATLAB, navigate to the folder containing these scripts and double\-click on [Integrals.prj](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=README.mlx). It will add the appropriate files to your MATLAB path and open an app that asks you where you would like to start. -Ensure you have all the required products ([listed below](#H_E850B4FF)) installed. If you need to include a product, add it using the Add\-On Explorer. To install an add\-on, go to the **Home** tab and select Add Ons icon **Add-Ons** > **Get Add-Ons**. +Ensure you have all the required products (listed below) installed. If you need to include a product, add it using the Add\-On Explorer. To install an add\-on, go to the **Home** tab and select AddOnsIcon.png **Add-Ons** > **Get Add-Ons**. - ## Products MATLABĀ® is used throughout. Tools from the Symbolic Math Toolboxā„¢ are used frequently as well. - -# Scripts -| **Full Script**
| **Visualizations**
| **Learning Goals**
In this script, students will...
| **Practice**
| -| :-- | :-- | :-- | :-- | - | [Antiderivatives.mlx](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/Antiderivatives.mlx&focus=true)
Family of antiderivatives
| [Visualizing Antiderivatives](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/AntiderivativesViz.mlx)
Animated family of antiderivatives
| - see a graphical presentation of the concept of general antiderivatives.
- develop computational fluency with the antiderivatives of powers, sines, cosines, and exponentials.
| [Calculate Antiderivatives](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/AntiderivativesPractice.mlx&focus=true)
$\displaystyle {\int \sin (3z) dz=-\frac{\cos (3z)}{3}+C}$
| -| [FundamentalTheorem.mlx](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/FundamentalTheorem.mlx&focus=true)
Distance traveled by skier
| [Visualizing the FTC](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/FundamentalTheoremViz.mlx&focus=true)
Signed area under a curve
| - explain the fundamental theorem of calculus.
- see why the Fundamental Theorem of Calculus makes sense graphically.
- develop computational fluency for definite integrals involving linear and rational combinations of powers, sines, cosines, exponentials and natural logarithms.
| [Apply the Fundamental Theorem of Calculus](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/FundamentalTheoremPractice.mlx&focus=true)
$\displaystyle {\int_1^3 \frac{1}{w^2 } dw=-\frac{1}{3}+1=\frac{2}{3}}$
| -| [Riemann.mlx](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/Riemann.mlx&focus=true)
Better approximation with smaller rectangles
| [Visualizing Riemann Sums](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/RiemannViz.mlx&focus=true)
Approximation by rectangles
| - explain and apply the different approximations computed by a left\-endpoint, right\-endpoint, midpoint, maximum, or minimum method of selecting a height value in a Riemann sum.
| - explain and apply the trapezoidal approximation.
- explain why increasing the number of intervals in an approximation will decrease the error.
- discuss the implications for applying calculus in applications with values that are discrete or continuous.
| -| [Substitution.mlx](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/Substitution.mlx&focus=true)
f(flower)
| [Visualizing Substitution](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/SubstitutionViz.mlx&focus=true)
Animation of dx and du
| - explain what the method of substitution is and how it works.
- develop fluency with computing integrals of combinations of powers, sines, cosines, exponentials and logarithms that are solvable
by substitution by hand.
- see a graphical understanding of the method of substitution.
| [Apply the method of substitution](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/SubstitutionPractice.mlx&focus=true)
$\displaystyle {\int \frac{\cos \left(\ln (t)+1\right)}{t} dt=\sin \left(\ln (t)+1\right)+C}$
| -| [ByParts.mlx](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/ByParts.mlx&focus=true)
Geometric integration by parts
| [Visualizing Integration by Parts](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/ByPartsViz.mlx&focus=true)
Integration horizontally and vertically
| - explain what the method of integration by parts is and how it works.
- develop fluency with computing integrals involving powers, sines, cosines, exponentials and logarithms that are solvable by integration by
parts by hand.
- see a graphical understanding of the integration by parts formula.
| [Apply the method of integration by parts](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/ByPartsPractice.mlx&focus=true)
$\displaystyle {\int y^2 e^y dy=y^2 e^y -2ye^y +2e^y +C}$
                    $\displaystyle =(y^2 -2y+2)e^y +C$
| - +# Scripts +| | | | | | +| :-- | :-- | :-- | :-- | :-- | +| **Topic**
| **Full Script**
| **Visualizations**
| **Learning Goals**
In this script, students will...
| **Practice**
| +| [Antiderivatives](ttps://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/Antiderivatives.mlx)
| [Antiderivatives.mlx](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/Antiderivatives.mlx)
adf.png
| [Visualizing Antiderivatives](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/AntiderivativesViz.mlx)
[family.gif](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/AntiderivativesViz.mlx)
| $\bullet$ see a graphical presentation of the concept of general antiderivatives.
$\bullet$ develop computational fluency with the antiderivatives of powers, sines, cosines, and exponentials.
| [Calculate Antiderivatives](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/AntiderivativesPractice.mlx)
$\displaystyle {\int \sin (3z)\;dz=-\frac{\cos (3z)}{3}+C}$
| +| [Fundamental Theorem of Calculus](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/FundamentalTheorem.mlx)
| [FundamentalTheorem.mlx](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/FundamentalTheorem.mlx)
[Ski-Area.png](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/FundamentalTheorem.mlx)
| [Visualizing the FTC](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/FundamentalTheoremViz.mlx)
[FTC-generated.png](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/FundamentalTheoremViz.mlx)
| $\bullet$ explain the fundamental theorem of calculus.
$\bullet$ see why the Fundamental Theorem of Calculus makes sense graphically.
$\bullet$ develop computational fluency for definite integrals involving linear and rational combinations of powers, sines, cosines, exponentials and natural logarithms.
| [Apply the Fundamental Theorem of Calculus](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/FundamentalTheoremPractice.mlx)
$\displaystyle {\int_1^3 \frac{1}{w^2 }\;dw=-\frac{1}{3}+1=\frac{2}{3}}$
| +| [Riemann Sums](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/Riemann.mlx)
| [Riemann.mlx](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/Riemann.mlx)
[animSolar.gif](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/Riemann.mlx)
| [Visualizing Riemann Sums](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/RiemannViz.mlx)
[AreaUnderCurve.png](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/RiemannViz.mlx)
| $\bullet$ explain and apply the different approximations computed by a left\-endpoint, right\-endpoint, midpoint, maximum, or minimum method of selecting a height value in a Riemann sum.
| $\bullet$ explain and apply the trapezoidal approximation.
$\bullet$ explain why increasing the number of intervals in an approximation will decrease the error.
$\bullet$ discuss the implications for applying calculus in applications with values that are discrete or continuous.
| +| [Substitution](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/Substitution.mlx)
| [Substitution.mlx](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/Substitution.mlx)
SubstIm.png
| [Visualizing Substitution](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/SubstitutionViz.mlx)
[animSubst.gif](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/SubstitutionViz.mlx)
| $\bullet$ explain what the method of substitution is and how it works.
$\bullet$ develop fluency with computing integrals of combinations of powers, sines, cosines, exponentials and logarithms that are solvable by substitution by hand.
$\bullet$ see a graphical understanding of the method of substitution.
| [Apply the method of substitution](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/SubstitutionPractice.mlx)
$\displaystyle {\int \frac{\cos \left(\ln (t)+1\right)}{t}\;dt=\sin \left(\ln (t)+1\right)+C}$
| +| [Integration by Parts](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/ByParts.mlx)
| [ByParts.mlx](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/ByParts.mlx)
[IBP.png](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/ByParts.mlx)
| [Visualizing Integration by Parts](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/ByPartsViz.mlx)
[ibp-generated.png](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/ByPartsViz.mlx)
| $\bullet$ explain what the method of integration by parts is and how it works.
$\bullet$ develop fluency with computing integrals involving powers, sines, cosines, exponentials and logarithms that are solvable by integration by parts by hand.
$\bullet$ see a graphical understanding of the integration by parts formula.
| [Apply the method of integration by parts](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Scripts/ByPartsPractice.mlx)
[ ${\int y^2 e^y \;dy=y^2 e^y -2ye^y +2e^y +C}$ ](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=cripts/ByPartsPractice.mlx)
                   [ $=(y^2 -2y+2)e^y +C$ ](matlab: edit practiceByParts.mlx)
| +| | | | | | # [Calculus Flashcards App](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Apps/CalculusFlashcards.mlapp&focus=true) -| 1. Choose the type of practice.
| 2. Solve problems.
| 3. Analyze your progress.
| +| | | | | :-- | :-- | :-- | -| CalcFlashcardsSettings | CalcFlashcardsPractice | CalcFlashcardsAnalysis | +| 1. Choose the type of practice.
| 2. Solve problems.
| 3. Analyze your progress.
| +| [CalcFlashcardsSettings.png](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Apps/CalculusFlashcards.mlapp&focus=true)
| [CalcFlashcardsPractice.png](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Apps/CalculusFlashcards.mlapp&focus=true)
| [CalcFlashcardsAnalysis.png](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Apps/CalculusFlashcards.mlapp&focus=true)
| +| | | | # Setup To Use the Calculus Flashcards App @@ -80,32 +80,31 @@ MATLAB Desktop MATLAB Online -1. [Open in MATLAB Online badge](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Apps/CalculusFlashcards.mlapp&focus=true) - +1. [OpenInMO.png](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Integrals&project=Integrals.prj&file=Apps/CalculusFlashcards.mlapp) # License The license for this module is available in the [LICENSE.md](https://github.com/MathWorks-Teaching-Resources/Calculus-Integrals/blob/release/LICENSE.md). # Related Courseware Modules -| **Courseware Module**
| **Sample Content**
| **Available on:**
| +| | | | | :-- | :-- | :-- | -| [**Calculus: Derivatives**](https://www.mathworks.com/matlabcentral/fileexchange/99249-calculus-derivatives)
| image_17.png
| [image_18.png](https://www.mathworks.com/matlabcentral/fileexchange/99249-calculus-derivatives)
[Open in MATLAB Online badge](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Derivatives/project=Derivatives.prj)
[GitHub](https://github.com/MathWorks-Teaching-Resources/Calculus-Derivatives)
| -|
[**Numerical Methods with Applications**](https://www.mathworks.com/matlabcentral/fileexchange/111490-numerical-methods-with-applications)
| image_20.png
|[image_21.png](https://www.mathworks.com/matlabcentral/fileexchange/111490-numerical-methods-with-applications)
[Open in MATLAB Online badge](https://matlab.mathworks.com/open/v1?repo=MathWorks-Teaching-Resources/Numerical-Methods-with-Applications/project=NumericalMethods.prj)
[GitHub](https://github.com/MathWorks-Teaching-Resources/Calculus-Derivatives)
| +| **Courseware Module**
| **Sample Content**
| **Available on:**
| +| [**Calculus: Derivatives**](https://www.mathworks.com/matlabcentral/fileexchange/99249-calculus-derivatives)
| CalcDer.png
| [OpenInFX.png](https://www.mathworks.com/matlabcentral/fileexchange/99249-calculus-derivatives)
[OpenInMO.png](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Calculus-Derivatives&project=Derivatives.prj)
[GitHub](https://github.com/MathWorks-Teaching-Resources/Calculus-Derivatives)
| +| [**Numerical Methods with Applications**](https://www.mathworks.com/matlabcentral/fileexchange/111490-numerical-methods-with-applications)
| AreaLake.png
| [OpenInFX.png](https://www.mathworks.com/matlabcentral/fileexchange/111490-numerical-methods-with-applications)
[OpenInMO.png](https://matlab.mathworks.com/open/github/v1?repo=MathWorks-Teaching-Resources/Numerical-Methods-with-Applications&project=NumericalMethods.prj)
[GitHub](https://github.com/MathWorks-Teaching-Resources/Calculus-Derivatives)
| +| | | | Or feel free to explore our other [modular courseware content](https://www.mathworks.com/matlabcentral/fileexchange/?q=tag%3A%22courseware+module%22&sort=downloads_desc_30d). # Educator Resources - [Educator Page](https://www.mathworks.com/academia/educators.html) - # Contribute Looking for more? Find an issue? Have a suggestion? Please contact the [MathWorks teaching resources team](mailto:%20onlineteaching@mathworks.com). If you want to contribute directly to this project, you can find information about how to do so in the [CONTRIBUTING.md](https://github.com/MathWorks-Teaching-Resources/Calculus-Integrals/blob/release/CONTRIBUTING.md) page on GitHub. - *Ā©* Copyright 2023 The MathWorksā„¢, Inc - + *Ā©* Copyright 2024 The MathWorksā„¢, Inc diff --git a/SoftwareTests/CheckTestResults.m b/SoftwareTests/CheckTestResults.m index fef0728..579ad43 100644 --- a/SoftwareTests/CheckTestResults.m +++ b/SoftwareTests/CheckTestResults.m @@ -4,7 +4,7 @@ end properties (ClassSetupParameter) - Project = {''}; + Project = {currentProject()}; end properties (TestParameter) @@ -15,8 +15,8 @@ methods (TestParameterDefinition,Static) function Version = GetResults(Project) - RootFolder = currentProject().RootFolder; - Version = dir(fullfile(RootFolder,"SoftwareTests","TestResults*.txt")); + RootFolder = Project.RootFolder; + Version = dir(fullfile(RootFolder,"public","TestResults*.txt")); Version = extractBetween([Version.name],"TestResults_",".txt"); end @@ -37,9 +37,11 @@ function SetUpSmokeTest(testCase,Project) methods(Test) function CheckResults(testCase,Version) - File = fullfile("SoftwareTests","TestResults_"+Version+".txt"); + File = fullfile("public","TestResults_"+Version+".txt"); Results = readtable(File,TextType="string"); - testCase.verifyTrue(all(Results.Passed)); + if ~all(Results.Passed) + error("Some of the tests did not pass.") + end end end diff --git a/SoftwareTests/CreateBadge.m b/SoftwareTests/CreateBadge.m deleted file mode 100644 index c873088..0000000 --- a/SoftwareTests/CreateBadge.m +++ /dev/null @@ -1,28 +0,0 @@ -% Create the test suite with SmokeTest and Function test if they exist -Suite = testsuite("CheckTestResults"); - -% Create a runner with no plugins -Runner = matlab.unittest.TestRunner.withNoPlugins; - -% Run the test suite -Results = Runner.run(Suite); - -% Format the results in a table and save them -Results = table(Results'); -Results = Results(Results.Passed,:); -Version = extractBetween(string(Results.Name),"Version=",")"); - - -% Format the JSON file -Badge = struct; -Badge.schemaVersion = 1; -Badge.label = "Tested with"; -if size(Results,1) >= 1 - Badge.color = "success" - Badge.message = join(Version," | "); -else - Badge.color = "failure"; - Badge.message = "Pipeline fails"; -end -Badge = jsonencode(Badge); -writelines(Badge,fullfile("Images","TestedWith.json")); \ No newline at end of file diff --git a/SoftwareTests/FunctionTests.m b/SoftwareTests/FunctionTests.m index cfcd234..789ab7a 100644 --- a/SoftwareTests/FunctionTests.m +++ b/SoftwareTests/FunctionTests.m @@ -1,5 +1,7 @@ classdef FunctionTests < matlab.unittest.TestCase + % https://www.mathworks.com/help/matlab/matlab_prog/use-parameters-in-class-based-tests.html + methods(Test) end % methods diff --git a/SoftwareTests/PostFiles/PostAntiderivatives.m b/SoftwareTests/PostFiles/PostAntiderivatives.m new file mode 100644 index 0000000..0796329 --- /dev/null +++ b/SoftwareTests/PostFiles/PostAntiderivatives.m @@ -0,0 +1,3 @@ +% Post-run script for Antiderivatives.mlx +% ---- Post-run commands ----- + diff --git a/SoftwareTests/PostFiles/PostAntiderivativesPractice.m b/SoftwareTests/PostFiles/PostAntiderivativesPractice.m new file mode 100644 index 0000000..0fd09ba --- /dev/null +++ b/SoftwareTests/PostFiles/PostAntiderivativesPractice.m @@ -0,0 +1,3 @@ +% Post-run script for AntiderivativesPractice.mlx +% ---- Post-run commands ----- + diff --git a/SoftwareTests/PostFiles/PostAntiderivativesPracticeSoln.m b/SoftwareTests/PostFiles/PostAntiderivativesPracticeSoln.m new file mode 100644 index 0000000..751535a --- /dev/null +++ b/SoftwareTests/PostFiles/PostAntiderivativesPracticeSoln.m @@ -0,0 +1,3 @@ +% Post-run script for AntiderivativesPracticeSoln.mlx +% ---- Post-run commands ----- + diff --git a/SoftwareTests/PostFiles/PostAntiderivativesSoln.m b/SoftwareTests/PostFiles/PostAntiderivativesSoln.m new file mode 100644 index 0000000..df754ee --- /dev/null +++ b/SoftwareTests/PostFiles/PostAntiderivativesSoln.m @@ -0,0 +1,3 @@ +% Post-run script for AntiderivativesSoln.mlx +% ---- Post-run commands ----- + diff --git a/SoftwareTests/PostFiles/PostAntiderivativesViz.m b/SoftwareTests/PostFiles/PostAntiderivativesViz.m new file mode 100644 index 0000000..4e3dedd --- /dev/null +++ b/SoftwareTests/PostFiles/PostAntiderivativesViz.m @@ -0,0 +1,3 @@ +% Post-run script for AntiderivativesViz.mlx +% ---- Post-run commands ----- + diff --git a/SoftwareTests/PostFiles/PostAntiderivativesVizSoln.m b/SoftwareTests/PostFiles/PostAntiderivativesVizSoln.m new file mode 100644 index 0000000..6a3b718 --- /dev/null +++ b/SoftwareTests/PostFiles/PostAntiderivativesVizSoln.m @@ -0,0 +1,3 @@ +% Post-run script for AntiderivativesVizSoln.mlx +% ---- Post-run commands ----- + diff --git a/SoftwareTests/PostFiles/PostByParts.m b/SoftwareTests/PostFiles/PostByParts.m new file mode 100644 index 0000000..ff1c5a6 --- /dev/null +++ b/SoftwareTests/PostFiles/PostByParts.m @@ -0,0 +1,3 @@ +% Post-run script for ByParts.mlx +% ---- Post-run commands ----- + diff --git a/SoftwareTests/PostFiles/PostByPartsPractice.m b/SoftwareTests/PostFiles/PostByPartsPractice.m new file mode 100644 index 0000000..145028a --- /dev/null +++ b/SoftwareTests/PostFiles/PostByPartsPractice.m @@ -0,0 +1,3 @@ +% Post-run script for ByPartsPractice.mlx +% ---- Post-run commands ----- + diff --git a/SoftwareTests/PostFiles/PostByPartsPracticeSoln.m b/SoftwareTests/PostFiles/PostByPartsPracticeSoln.m new file mode 100644 index 0000000..ae985f0 --- /dev/null +++ b/SoftwareTests/PostFiles/PostByPartsPracticeSoln.m @@ -0,0 +1,3 @@ +% Post-run script for ByPartsPracticeSoln.mlx +% ---- Post-run commands ----- + diff --git a/SoftwareTests/PostFiles/PostByPartsSoln.m b/SoftwareTests/PostFiles/PostByPartsSoln.m new file mode 100644 index 0000000..6250089 --- /dev/null +++ b/SoftwareTests/PostFiles/PostByPartsSoln.m @@ -0,0 +1,3 @@ +% Post-run script for ByPartsSoln.mlx +% ---- Post-run commands ----- + diff --git a/SoftwareTests/PostFiles/PostByPartsViz.m b/SoftwareTests/PostFiles/PostByPartsViz.m new file mode 100644 index 0000000..5e860e7 --- /dev/null +++ b/SoftwareTests/PostFiles/PostByPartsViz.m @@ -0,0 +1,3 @@ +% Post-run script for ByPartsViz.mlx +% ---- Post-run commands ----- + diff --git a/SoftwareTests/PostFiles/PostByPartsVizSoln.m b/SoftwareTests/PostFiles/PostByPartsVizSoln.m new file mode 100644 index 0000000..bfc452d --- /dev/null +++ b/SoftwareTests/PostFiles/PostByPartsVizSoln.m @@ -0,0 +1,3 @@ +% Post-run script for ByPartsVizSoln.mlx +% ---- Post-run commands ----- + diff --git a/SoftwareTests/PostFiles/PostFundamentalTheorem.m b/SoftwareTests/PostFiles/PostFundamentalTheorem.m new file mode 100644 index 0000000..4bf4e1f --- /dev/null +++ b/SoftwareTests/PostFiles/PostFundamentalTheorem.m @@ -0,0 +1,3 @@ +% Post-run script for FundamentalTheorem.mlx +% ---- Post-run commands ----- + diff --git a/SoftwareTests/PostFiles/PostFundamentalTheoremPractice.m b/SoftwareTests/PostFiles/PostFundamentalTheoremPractice.m new file mode 100644 index 0000000..5505827 --- /dev/null +++ b/SoftwareTests/PostFiles/PostFundamentalTheoremPractice.m @@ -0,0 +1,3 @@ +% Post-run script for FundamentalTheoremPractice.mlx +% ---- Post-run commands ----- + diff --git a/SoftwareTests/PostFiles/PostFundamentalTheoremPracticeSoln.m b/SoftwareTests/PostFiles/PostFundamentalTheoremPracticeSoln.m new file mode 100644 index 0000000..bf619f8 --- /dev/null +++ b/SoftwareTests/PostFiles/PostFundamentalTheoremPracticeSoln.m @@ -0,0 +1,3 @@ +% Post-run script for FundamentalTheoremPracticeSoln.mlx +% ---- Post-run commands ----- + diff --git a/SoftwareTests/PostFiles/PostFundamentalTheoremSoln.m b/SoftwareTests/PostFiles/PostFundamentalTheoremSoln.m new file mode 100644 index 0000000..b378346 --- /dev/null +++ b/SoftwareTests/PostFiles/PostFundamentalTheoremSoln.m @@ -0,0 +1,3 @@ +% Post-run script for FundamentalTheoremSoln.mlx +% ---- Post-run commands ----- + diff --git a/SoftwareTests/PostFiles/PostFundamentalTheoremViz.m b/SoftwareTests/PostFiles/PostFundamentalTheoremViz.m new file mode 100644 index 0000000..a78c6c8 --- /dev/null +++ b/SoftwareTests/PostFiles/PostFundamentalTheoremViz.m @@ -0,0 +1,3 @@ +% Post-run script for FundamentalTheoremViz.mlx +% ---- Post-run commands ----- + diff --git a/SoftwareTests/PostFiles/PostFundamentalTheoremVizSoln.m b/SoftwareTests/PostFiles/PostFundamentalTheoremVizSoln.m new file mode 100644 index 0000000..f8d06eb --- /dev/null +++ b/SoftwareTests/PostFiles/PostFundamentalTheoremVizSoln.m @@ -0,0 +1,3 @@ +% Post-run script for FundamentalTheoremVizSoln.mlx +% ---- Post-run commands ----- + diff --git a/SoftwareTests/PostFiles/PostRiemann.m b/SoftwareTests/PostFiles/PostRiemann.m new file mode 100644 index 0000000..e8f5c4d --- /dev/null +++ b/SoftwareTests/PostFiles/PostRiemann.m @@ -0,0 +1,3 @@ +% Post-run script for Riemann.mlx +% ---- Post-run commands ----- + diff --git a/SoftwareTests/PostFiles/PostRiemannSoln.m b/SoftwareTests/PostFiles/PostRiemannSoln.m new file mode 100644 index 0000000..fed425e --- /dev/null +++ b/SoftwareTests/PostFiles/PostRiemannSoln.m @@ -0,0 +1,3 @@ +% Post-run script for RiemannSoln.mlx +% ---- Post-run commands ----- + diff --git a/SoftwareTests/PostFiles/PostRiemannViz.m b/SoftwareTests/PostFiles/PostRiemannViz.m new file mode 100644 index 0000000..946fe1c --- /dev/null +++ b/SoftwareTests/PostFiles/PostRiemannViz.m @@ -0,0 +1,3 @@ +% Post-run script for RiemannViz.mlx +% ---- Post-run commands ----- + diff --git a/SoftwareTests/PostFiles/PostRiemannVizSoln.m b/SoftwareTests/PostFiles/PostRiemannVizSoln.m new file mode 100644 index 0000000..caf161a --- /dev/null +++ b/SoftwareTests/PostFiles/PostRiemannVizSoln.m @@ -0,0 +1,3 @@ +% Post-run script for RiemannVizSoln.mlx +% ---- Post-run commands ----- + diff --git a/SoftwareTests/PostFiles/PostSubstitution.m b/SoftwareTests/PostFiles/PostSubstitution.m new file mode 100644 index 0000000..dab51b2 --- /dev/null +++ b/SoftwareTests/PostFiles/PostSubstitution.m @@ -0,0 +1,3 @@ +% Post-run script for Substitution.mlx +% ---- Post-run commands ----- + diff --git a/SoftwareTests/PostFiles/PostSubstitutionPractice.m b/SoftwareTests/PostFiles/PostSubstitutionPractice.m new file mode 100644 index 0000000..5928368 --- /dev/null +++ b/SoftwareTests/PostFiles/PostSubstitutionPractice.m @@ -0,0 +1,3 @@ +% Post-run script for SubstitutionPractice.mlx +% ---- Post-run commands ----- + diff --git a/SoftwareTests/PostFiles/PostSubstitutionPracticeSoln.m b/SoftwareTests/PostFiles/PostSubstitutionPracticeSoln.m new file mode 100644 index 0000000..0e61b92 --- /dev/null +++ b/SoftwareTests/PostFiles/PostSubstitutionPracticeSoln.m @@ -0,0 +1,3 @@ +% Post-run script for SubstitutionPracticeSoln.mlx +% ---- Post-run commands ----- + diff --git a/SoftwareTests/PostFiles/PostSubstitutionSoln.m b/SoftwareTests/PostFiles/PostSubstitutionSoln.m new file mode 100644 index 0000000..ff744a8 --- /dev/null +++ b/SoftwareTests/PostFiles/PostSubstitutionSoln.m @@ -0,0 +1,3 @@ +% Post-run script for SubstitutionSoln.mlx +% ---- Post-run commands ----- + diff --git a/SoftwareTests/PostFiles/PostSubstitutionViz.m b/SoftwareTests/PostFiles/PostSubstitutionViz.m new file mode 100644 index 0000000..d657801 --- /dev/null +++ b/SoftwareTests/PostFiles/PostSubstitutionViz.m @@ -0,0 +1,3 @@ +% Post-run script for SubstitutionViz.mlx +% ---- Post-run commands ----- + diff --git a/SoftwareTests/PostFiles/PostSubstitutionVizSoln.m b/SoftwareTests/PostFiles/PostSubstitutionVizSoln.m new file mode 100644 index 0000000..3bb70e0 --- /dev/null +++ b/SoftwareTests/PostFiles/PostSubstitutionVizSoln.m @@ -0,0 +1,3 @@ +% Post-run script for SubstitutionVizSoln.mlx +% ---- Post-run commands ----- + diff --git a/SoftwareTests/PostSmokeTest.m b/SoftwareTests/PostSmokeTest.m new file mode 100644 index 0000000..7dc6b53 --- /dev/null +++ b/SoftwareTests/PostSmokeTest.m @@ -0,0 +1,66 @@ +function PostSmokeTest(ShowReport) +arguments + ShowReport (1,1) logical = false; +end + +import matlab.unittest.plugins.TestRunnerPlugin; + +% Create the runner: +Runner = matlab.unittest.TestRunner.withTextOutput; + +% Create report folder: +Folder = fullfile(currentProject().RootFolder,"public"); +if ~isfolder(Folder) + mkdir(Folder) +end + +% Add HTML plugin: +Plugin = matlab.unittest.plugins.TestReportPlugin.producingHTML(Folder,... + "IncludingPassingDiagnostics",true,... + "IncludingCommandWindowText",false,... + "LoggingLevel",matlab.automation.Verbosity(1)); +Runner.addPlugin(Plugin); + + +% Create Test Suite +Suite = testsuite("CheckTestResults"); + +% Run the test suite +Results = Runner.run(Suite); + + +% Format the results in a table and save them +Results = table(Results'); +Version = extractBetween(string(Results.Name),"Version=",")"); +Passed = Results.Passed; + +% Add link to other report +File = fileread(fullfile("public","index.html")); +for iVer = 1:length(Version) + File = replace(File,"Version="+Version(iVer),... + sprintf('%s',Version(iVer),"Version="+Version(iVer))); +end +writelines(File,fullfile("public","index.html"),"WriteMode","overwrite"); + +% Format the JSON file +Badge = struct; +Badge.schemaVersion = 1; +Badge.label = "Test Status"; +if all(Passed) + Badge.color = "success"; + Badge.message = join("R"+Version," | "); +elseif any(Passed) + Badge.color = "yellowgreen"; + Badge.message = join("R") +elseif all(~Passed) + Badge.color = "critical"; + Badge.message = join("R"+Version," | "); +end +Badge = jsonencode(Badge); +writelines(Badge,fullfile("Images","TestedWith.json")); + +if ShowReport + web(fullfile(Folder,"index.html")) +end + +end \ No newline at end of file diff --git a/SoftwareTests/PreFiles/PreAntiderivatives.m b/SoftwareTests/PreFiles/PreAntiderivatives.m new file mode 100644 index 0000000..78200fe --- /dev/null +++ b/SoftwareTests/PreFiles/PreAntiderivatives.m @@ -0,0 +1,5 @@ +% Pre-run script for Antiderivatives.mlx +% ---- Known Issues ----- +KnownIssuesID = ""; +% ---- Pre-run commands ----- + diff --git a/SoftwareTests/PreFiles/PreAntiderivativesPractice.m b/SoftwareTests/PreFiles/PreAntiderivativesPractice.m new file mode 100644 index 0000000..fa9b852 --- /dev/null +++ b/SoftwareTests/PreFiles/PreAntiderivativesPractice.m @@ -0,0 +1,5 @@ +% Pre-run script for AntiderivativesPractice.mlx +% ---- Known Issues ----- +KnownIssuesID = ""; +% ---- Pre-run commands ----- + diff --git a/SoftwareTests/PreFiles/PreAntiderivativesPracticeSoln.m b/SoftwareTests/PreFiles/PreAntiderivativesPracticeSoln.m new file mode 100644 index 0000000..a99ad75 --- /dev/null +++ b/SoftwareTests/PreFiles/PreAntiderivativesPracticeSoln.m @@ -0,0 +1,5 @@ +% Pre-run script for AntiderivativesPracticeSoln.mlx +% ---- Known Issues ----- +KnownIssuesID = ""; +% ---- Pre-run commands ----- + diff --git a/SoftwareTests/PreFiles/PreAntiderivativesSoln.m b/SoftwareTests/PreFiles/PreAntiderivativesSoln.m new file mode 100644 index 0000000..ddc56f0 --- /dev/null +++ b/SoftwareTests/PreFiles/PreAntiderivativesSoln.m @@ -0,0 +1,5 @@ +% Pre-run script for AntiderivativesSoln.mlx +% ---- Known Issues ----- +KnownIssuesID = ""; +% ---- Pre-run commands ----- + diff --git a/SoftwareTests/PreFiles/PreAntiderivativesViz.m b/SoftwareTests/PreFiles/PreAntiderivativesViz.m new file mode 100644 index 0000000..f0860d4 --- /dev/null +++ b/SoftwareTests/PreFiles/PreAntiderivativesViz.m @@ -0,0 +1,5 @@ +% Pre-run script for AntiderivativesViz.mlx +% ---- Known Issues ----- +KnownIssuesID = ""; +% ---- Pre-run commands ----- + diff --git a/SoftwareTests/PreFiles/PreAntiderivativesVizSoln.m b/SoftwareTests/PreFiles/PreAntiderivativesVizSoln.m new file mode 100644 index 0000000..b36f33a --- /dev/null +++ b/SoftwareTests/PreFiles/PreAntiderivativesVizSoln.m @@ -0,0 +1,5 @@ +% Pre-run script for AntiderivativesVizSoln.mlx +% ---- Known Issues ----- +KnownIssuesID = ""; +% ---- Pre-run commands ----- + diff --git a/SoftwareTests/PreFiles/PreByParts.m b/SoftwareTests/PreFiles/PreByParts.m new file mode 100644 index 0000000..17cdd5c --- /dev/null +++ b/SoftwareTests/PreFiles/PreByParts.m @@ -0,0 +1,5 @@ +% Pre-run script for ByParts.mlx +% ---- Known Issues ----- +KnownIssuesID = ""; +% ---- Pre-run commands ----- + diff --git a/SoftwareTests/PreFiles/PreByPartsPractice.m b/SoftwareTests/PreFiles/PreByPartsPractice.m new file mode 100644 index 0000000..6dd41d1 --- /dev/null +++ b/SoftwareTests/PreFiles/PreByPartsPractice.m @@ -0,0 +1,5 @@ +% Pre-run script for ByPartsPractice.mlx +% ---- Known Issues ----- +KnownIssuesID = ""; +% ---- Pre-run commands ----- + diff --git a/SoftwareTests/PreFiles/PreByPartsPracticeSoln.m b/SoftwareTests/PreFiles/PreByPartsPracticeSoln.m new file mode 100644 index 0000000..013d6f9 --- /dev/null +++ b/SoftwareTests/PreFiles/PreByPartsPracticeSoln.m @@ -0,0 +1,5 @@ +% Pre-run script for ByPartsPracticeSoln.mlx +% ---- Known Issues ----- +KnownIssuesID = ""; +% ---- Pre-run commands ----- + diff --git a/SoftwareTests/PreFiles/PreByPartsSoln.m b/SoftwareTests/PreFiles/PreByPartsSoln.m new file mode 100644 index 0000000..b86f44a --- /dev/null +++ b/SoftwareTests/PreFiles/PreByPartsSoln.m @@ -0,0 +1,5 @@ +% Pre-run script for ByPartsSoln.mlx +% ---- Known Issues ----- +KnownIssuesID = ""; +% ---- Pre-run commands ----- + diff --git a/SoftwareTests/PreFiles/PreByPartsViz.m b/SoftwareTests/PreFiles/PreByPartsViz.m new file mode 100644 index 0000000..6e95739 --- /dev/null +++ b/SoftwareTests/PreFiles/PreByPartsViz.m @@ -0,0 +1,5 @@ +% Pre-run script for ByPartsViz.mlx +% ---- Known Issues ----- +KnownIssuesID = ""; +% ---- Pre-run commands ----- + diff --git a/SoftwareTests/PreFiles/PreByPartsVizSoln.m b/SoftwareTests/PreFiles/PreByPartsVizSoln.m new file mode 100644 index 0000000..dbf5653 --- /dev/null +++ b/SoftwareTests/PreFiles/PreByPartsVizSoln.m @@ -0,0 +1,5 @@ +% Pre-run script for ByPartsVizSoln.mlx +% ---- Known Issues ----- +KnownIssuesID = ""; +% ---- Pre-run commands ----- + diff --git a/SoftwareTests/PreFiles/PreFundamentalTheorem.m b/SoftwareTests/PreFiles/PreFundamentalTheorem.m new file mode 100644 index 0000000..7bbafa4 --- /dev/null +++ b/SoftwareTests/PreFiles/PreFundamentalTheorem.m @@ -0,0 +1,5 @@ +% Pre-run script for FundamentalTheorem.mlx +% ---- Known Issues ----- +KnownIssuesID = ""; +% ---- Pre-run commands ----- + diff --git a/SoftwareTests/PreFiles/PreFundamentalTheoremPractice.m b/SoftwareTests/PreFiles/PreFundamentalTheoremPractice.m new file mode 100644 index 0000000..1915936 --- /dev/null +++ b/SoftwareTests/PreFiles/PreFundamentalTheoremPractice.m @@ -0,0 +1,5 @@ +% Pre-run script for FundamentalTheoremPractice.mlx +% ---- Known Issues ----- +KnownIssuesID = ""; +% ---- Pre-run commands ----- + diff --git a/SoftwareTests/PreFiles/PreFundamentalTheoremPracticeSoln.m b/SoftwareTests/PreFiles/PreFundamentalTheoremPracticeSoln.m new file mode 100644 index 0000000..40176d3 --- /dev/null +++ b/SoftwareTests/PreFiles/PreFundamentalTheoremPracticeSoln.m @@ -0,0 +1,5 @@ +% Pre-run script for FundamentalTheoremPracticeSoln.mlx +% ---- Known Issues ----- +KnownIssuesID = ""; +% ---- Pre-run commands ----- + diff --git a/SoftwareTests/PreFiles/PreFundamentalTheoremSoln.m b/SoftwareTests/PreFiles/PreFundamentalTheoremSoln.m new file mode 100644 index 0000000..76fe643 --- /dev/null +++ b/SoftwareTests/PreFiles/PreFundamentalTheoremSoln.m @@ -0,0 +1,5 @@ +% Pre-run script for FundamentalTheoremSoln.mlx +% ---- Known Issues ----- +KnownIssuesID = ""; +% ---- Pre-run commands ----- + diff --git a/SoftwareTests/PreFiles/PreFundamentalTheoremViz.m b/SoftwareTests/PreFiles/PreFundamentalTheoremViz.m new file mode 100644 index 0000000..01316fe --- /dev/null +++ b/SoftwareTests/PreFiles/PreFundamentalTheoremViz.m @@ -0,0 +1,5 @@ +% Pre-run script for FundamentalTheoremViz.mlx +% ---- Known Issues ----- +KnownIssuesID = ""; +% ---- Pre-run commands ----- + diff --git a/SoftwareTests/PreFiles/PreFundamentalTheoremVizSoln.m b/SoftwareTests/PreFiles/PreFundamentalTheoremVizSoln.m new file mode 100644 index 0000000..f68866e --- /dev/null +++ b/SoftwareTests/PreFiles/PreFundamentalTheoremVizSoln.m @@ -0,0 +1,5 @@ +% Pre-run script for FundamentalTheoremVizSoln.mlx +% ---- Known Issues ----- +KnownIssuesID = ""; +% ---- Pre-run commands ----- + diff --git a/SoftwareTests/PreFiles/PreRiemann.m b/SoftwareTests/PreFiles/PreRiemann.m new file mode 100644 index 0000000..532e729 --- /dev/null +++ b/SoftwareTests/PreFiles/PreRiemann.m @@ -0,0 +1,5 @@ +% Pre-run script for Riemann.mlx +% ---- Known Issues ----- +KnownIssuesID = ""; +% ---- Pre-run commands ----- + diff --git a/SoftwareTests/PreFiles/PreRiemannSoln.m b/SoftwareTests/PreFiles/PreRiemannSoln.m new file mode 100644 index 0000000..8980df4 --- /dev/null +++ b/SoftwareTests/PreFiles/PreRiemannSoln.m @@ -0,0 +1,5 @@ +% Pre-run script for RiemannSoln.mlx +% ---- Known Issues ----- +KnownIssuesID = ""; +% ---- Pre-run commands ----- + diff --git a/SoftwareTests/PreFiles/PreRiemannViz.m b/SoftwareTests/PreFiles/PreRiemannViz.m new file mode 100644 index 0000000..24035e7 --- /dev/null +++ b/SoftwareTests/PreFiles/PreRiemannViz.m @@ -0,0 +1,5 @@ +% Pre-run script for RiemannViz.mlx +% ---- Known Issues ----- +KnownIssuesID = ""; +% ---- Pre-run commands ----- + diff --git a/SoftwareTests/PreFiles/PreRiemannVizSoln.m b/SoftwareTests/PreFiles/PreRiemannVizSoln.m new file mode 100644 index 0000000..8584584 --- /dev/null +++ b/SoftwareTests/PreFiles/PreRiemannVizSoln.m @@ -0,0 +1,5 @@ +% Pre-run script for RiemannVizSoln.mlx +% ---- Known Issues ----- +KnownIssuesID = ""; +% ---- Pre-run commands ----- + diff --git a/SoftwareTests/PreFiles/PreSubstitution.m b/SoftwareTests/PreFiles/PreSubstitution.m new file mode 100644 index 0000000..ff8dbdc --- /dev/null +++ b/SoftwareTests/PreFiles/PreSubstitution.m @@ -0,0 +1,5 @@ +% Pre-run script for Substitution.mlx +% ---- Known Issues ----- +KnownIssuesID = ""; +% ---- Pre-run commands ----- + diff --git a/SoftwareTests/PreFiles/PreSubstitutionPractice.m b/SoftwareTests/PreFiles/PreSubstitutionPractice.m new file mode 100644 index 0000000..72efc04 --- /dev/null +++ b/SoftwareTests/PreFiles/PreSubstitutionPractice.m @@ -0,0 +1,5 @@ +% Pre-run script for SubstitutionPractice.mlx +% ---- Known Issues ----- +KnownIssuesID = ""; +% ---- Pre-run commands ----- + diff --git a/SoftwareTests/PreFiles/PreSubstitutionPracticeSoln.m b/SoftwareTests/PreFiles/PreSubstitutionPracticeSoln.m new file mode 100644 index 0000000..d501548 --- /dev/null +++ b/SoftwareTests/PreFiles/PreSubstitutionPracticeSoln.m @@ -0,0 +1,5 @@ +% Pre-run script for SubstitutionPracticeSoln.mlx +% ---- Known Issues ----- +KnownIssuesID = ""; +% ---- Pre-run commands ----- + diff --git a/SoftwareTests/PreFiles/PreSubstitutionSoln.m b/SoftwareTests/PreFiles/PreSubstitutionSoln.m new file mode 100644 index 0000000..f4741f6 --- /dev/null +++ b/SoftwareTests/PreFiles/PreSubstitutionSoln.m @@ -0,0 +1,5 @@ +% Pre-run script for SubstitutionSoln.mlx +% ---- Known Issues ----- +KnownIssuesID = ""; +% ---- Pre-run commands ----- + diff --git a/SoftwareTests/PreFiles/PreSubstitutionViz.m b/SoftwareTests/PreFiles/PreSubstitutionViz.m new file mode 100644 index 0000000..8a7dc5f --- /dev/null +++ b/SoftwareTests/PreFiles/PreSubstitutionViz.m @@ -0,0 +1,5 @@ +% Pre-run script for SubstitutionViz.mlx +% ---- Known Issues ----- +KnownIssuesID = ""; +% ---- Pre-run commands ----- + diff --git a/SoftwareTests/PreFiles/PreSubstitutionVizSoln.m b/SoftwareTests/PreFiles/PreSubstitutionVizSoln.m new file mode 100644 index 0000000..3070e9d --- /dev/null +++ b/SoftwareTests/PreFiles/PreSubstitutionVizSoln.m @@ -0,0 +1,5 @@ +% Pre-run script for SubstitutionVizSoln.mlx +% ---- Known Issues ----- +KnownIssuesID = ""; +% ---- Pre-run commands ----- + diff --git a/SoftwareTests/RunAllTests.m b/SoftwareTests/RunAllTests.m index 2b03faf..046a893 100644 --- a/SoftwareTests/RunAllTests.m +++ b/SoftwareTests/RunAllTests.m @@ -1,46 +1,42 @@ -function RunAllTest(EnableReport,ReportFolder) +function RunAllTests(ShowReport) arguments - EnableReport (1,1) logical = false; - ReportFolder (1,1) string = "public"; + ShowReport (1,1) logical = false; end import matlab.unittest.plugins.TestReportPlugin; % Create a runner Runner = matlab.unittest.TestRunner.withTextOutput; -if EnableReport - Folder = fullfile(currentProject().RootFolder,ReportFolder); - if ~isfolder(Folder) - mkdir(Folder) - else - rmdir(Folder,'s') - mkdir(Folder) - end - Plugin = TestReportPlugin.producingHTML(Folder,... - "IncludingPassingDiagnostics",true,... - "IncludingCommandWindowText",true,... - "LoggingLevel",matlab.automation.Verbosity(1)); - Runner.addPlugin(Plugin); +Folder = fullfile(currentProject().RootFolder,"public",version("-release")); +if ~isfolder(Folder) + mkdir(Folder) +else + rmdir(Folder,'s') + mkdir(Folder) end +Plugin = TestReportPlugin.producingHTML(Folder,... + "IncludingPassingDiagnostics",true,... + "IncludingCommandWindowText",true,... + "LoggingLevel",matlab.automation.Verbosity(1)); +Runner.addPlugin(Plugin); + % Create the test suite with SmokeTest and Function test if they exist Suite = testsuite("SmokeTests"); Suite = [Suite testsuite("FunctionTests")]; +Suite = [Suite testsuite("SolnSmokeTests")]; % Run the test suite Results = Runner.run(Suite); -if EnableReport +if ShowReport web(fullfile(Folder,"index.html")) -% else -% T = table(Results); -% disp(newline + "Test summary:") -% disp(T) end % Format the results in a table and save them ResultsTable = table(Results') -writetable(ResultsTable,fullfile("SoftwareTests","TestResults_R"+version("-release")+".txt")); +writetable(ResultsTable,fullfile(currentProject().RootFolder,... + "public","TestResults_"+version("-release")+".txt")); % Assert success of test assertSuccess(Results); diff --git a/SoftwareTests/SmokeTests.m b/SoftwareTests/SmokeTests.m index 8f1b529..ced801e 100644 --- a/SoftwareTests/SmokeTests.m +++ b/SoftwareTests/SmokeTests.m @@ -1,86 +1,151 @@ classdef SmokeTests < matlab.unittest.TestCase + + properties + RootFolder + sparedEditors % Files already open when the test starts + end % properties properties (ClassSetupParameter) - Project = {''}; - end + Project = {currentProject()}; + end % ClassSetupParameter properties (TestParameter) - Scripts; - end + File; + end % TestParameter methods (TestParameterDefinition,Static) - function Scripts = GetScriptName(Project) + function File = RetrieveFile(Project) %#ok + % Retrieve student template files: RootFolder = currentProject().RootFolder; - Scripts = dir(fullfile(RootFolder,"Scripts","*.mlx")); - Scripts = {Scripts.name}; + File = dir(fullfile(RootFolder,"Scripts","*.mlx")); + File = {File.name}; end - end + end % Static TestParameterDefinition methods (TestClassSetup) - function SetUpSmokeTest(testCase,Project) - try - currentProject; - catch ME - warning("Project is not loaded.") - end - end + function SetUpSmokeTest(testCase,Project) %#ok + % Navigate to project root folder: + testCase.RootFolder = Project.RootFolder; + cd(testCase.RootFolder) + + % Close the StartUp app if still open: + delete(findall(groot,'Name','StartUp App')) - - end + % Log MATLAB version: + testCase.log("Running in " + version) + end + end % TestClassSetup + methods(TestMethodSetup) + function recordEditorsToSpare(testCase) + testCase.sparedEditors = matlab.desktop.editor.getAll; + testCase.sparedEditors = {testCase.sparedEditors.Filename}; + end + end % TestMethodSetup - methods(Test) - - function SmokeRun(testCase,Scripts) - Filename = string(Scripts); - switch (Filename) - otherwise - SimpleSmokeTest(testCase,Filename) + methods(TestMethodTeardown) + function closeOpenedEditors_thenDeleteWorkingDir(testCase) + openEditors = matlab.desktop.editor.getAll; + for editor=openEditors(1:end) + if any(strcmp(editor.Filename, testCase.sparedEditors)) + continue; + end + % if not on our list, close the file + editor.close(); end end - - end + end % TestMethodTeardown + methods(Test) - methods (Access = private) + function SmokeRun(testCase,File) - function SimpleSmokeTest(testCase,Filename) + % Navigate to project root folder: + cd(testCase.RootFolder) + FileToRun = string(File); - % Run the Smoke test - RootFolder = currentProject().RootFolder; - cd(RootFolder) - disp(">> Running " + Filename); + % Pre-test: + PreFiles = CheckPreFile(testCase,FileToRun); + run(PreFiles); + + % Run SmokeTest + disp(">> Running " + FileToRun); try - run(fullfile("Scripts",Filename)); - catch ME - testCase.verifyTrue(false,ME.message); + run(fullfile("Scripts",FileToRun)); + catch ME + end - - % Log the opened figures to the test reports + + % Post-test: + PostFiles = CheckPostFile(testCase,FileToRun); + run(PostFiles) + + % Log every figure created during run: Figures = findall(groot,'Type','figure'); Figures = flipud(Figures); if ~isempty(Figures) for f = 1:size(Figures,1) - FigDiag = matlab.unittest.diagnostics.FigureDiagnostic(Figures(f)); - log(testCase,1,FigDiag); + if ~isempty(Figures(f).Number) + FigDiag = matlab.unittest.diagnostics.FigureDiagnostic(Figures(f),'Formats','png'); + log(testCase,1,FigDiag); + end + end + end + + % Close all figures and Simulink models + close all force + if any(matlab.addons.installedAddons().Name == "Simulink") + bdclose all + end + + % Rethrow error if any + if exist("ME","var") + if ~any(strcmp(ME.identifier,KnownIssuesID)) + rethrow(ME) end end - close all end + + end % Test Methods + - end + methods (Access = private) - methods (TestClassTeardown) + function Path = CheckPreFile(testCase,Filename) + PreFile = "Pre"+replace(Filename,".mlx",".m"); + PreFilePath = fullfile(testCase.RootFolder,"SoftwareTests","PreFiles",PreFile); + if ~isfolder(fullfile(testCase.RootFolder,"SoftwareTests/PreFiles")) + mkdir(fullfile(testCase.RootFolder,"SoftwareTests/PreFiles")) + end + if ~isfile(PreFilePath) + writelines("% Pre-run script for "+Filename,PreFilePath) + writelines("% ---- Known Issues -----",PreFilePath,'WriteMode','append'); + writelines("KnownIssuesID = "+char(34)+char(34)+";",PreFilePath,'WriteMode','append'); + writelines("% ---- Pre-run commands -----",PreFilePath,'WriteMode','append'); + writelines(" ",PreFilePath,'WriteMode','append'); + end + Path = PreFilePath; + end - function closeAllFigure(testCase) - close all force % Close figure windows + function Path = CheckPostFile(testCase,Filename) + PostFile = "Post"+replace(Filename,".mlx",".m"); + PostFilePath = fullfile(testCase.RootFolder,"SoftwareTests","PostFiles",PostFile); + if ~isfolder(fullfile(testCase.RootFolder,"SoftwareTests/PostFiles")) + mkdir(fullfile(testCase.RootFolder,"SoftwareTests/PostFiles")) + end + if ~isfile(PostFilePath) + writelines("% Post-run script for "+Filename,PostFilePath) + writelines("% ---- Post-run commands -----",PostFilePath,'WriteMode','append'); + writelines(" ",PostFilePath,'WriteMode','append'); + end + Path = PostFilePath; end - end % methods (TestClassTeardown) + end % Private Methods -end \ No newline at end of file +end % Smoketests \ No newline at end of file diff --git a/SoftwareTests/SolnSmokeTests.m b/SoftwareTests/SolnSmokeTests.m new file mode 100644 index 0000000..ec7b5a2 --- /dev/null +++ b/SoftwareTests/SolnSmokeTests.m @@ -0,0 +1,166 @@ +classdef SolnSmokeTests < matlab.unittest.TestCase + + properties + RootFolder + isSolnOnPath + sparedEditors % Track open files + end % properties + + properties (ClassSetupParameter) + Project = {currentProject()}; + end % ClassSetupParameter + + methods(TestMethodSetup) + function recordEditorsToSpare(testCase) + testCase.sparedEditors = matlab.desktop.editor.getAll; + testCase.sparedEditors = {testCase.sparedEditors.Filename}; + end + end % TestMethodSetup + + methods(TestMethodTeardown) + function closeOpenedEditors_thenDeleteWorkingDir(testCase) + openEditors = matlab.desktop.editor.getAll; + for editor=openEditors(1:end) + if any(strcmp(editor.Filename, testCase.sparedEditors)) + continue; + end + % if not on our list, close the file + editor.close(); + end + end + end % TestMethodTeardown + + properties (TestParameter) + File; + end % TestParameter + + methods (TestParameterDefinition,Static) + + function File = GetScriptName(Project) + % Retrieve student template files: + RootFolder = Project.RootFolder; + File = dir(fullfile(RootFolder,"Scripts","*.mlx")); + File = {File.name}; + end + + end % Static TestParameterDefinition + + methods (TestClassSetup) + + function SetUpPath(testCase,Project) + % Navigate to project root folder: + testCase.RootFolder = Project.RootFolder; + cd(testCase.RootFolder) + + % Check that solutions are on path: + testCase.isSolnOnPath = isfolder("Solutions"); + if testCase.isSolnOnPath == 0 + addpath(fullfile(testCase.RootFolder,"InstructorResources","Solutions")) + end + + % Close the StartUp app if still open: + delete(findall(groot,'Name','StartUp App')) + + % Log MATLAB version: + testCase.log("Running in " + version) + + end % function setUpPath + + end % methods (TestClassSetup) + + methods(Test) + + % Check that solutions files exist for each of the student + % templates + function ExistSolns(testCase,File) + SolutionName = replace(string(File),".mlx","Soln.mlx"); + assert(exist(SolutionName,"file"),"Missing solutions for "+File); + end + + + function SmokeRun(testCase,File) + + % Navigate to project root folder: + cd(testCase.RootFolder) + FileToRun = replace(string(File),".mlx","Soln.mlx"); + + % Pre-test: + PreFiles = CheckPreFile(testCase,FileToRun); + run(PreFiles); + + % Run SmokeTest + disp(">> Running " + FileToRun); + try + run(fullfile("InstructorResources","Solutions",FileToRun)); + catch ME + + end + + % Post-test: + PostFiles = CheckPostFile(testCase,FileToRun); + run(PostFiles) + + % Log every figure created during run: + Figures = findall(groot,'Type','figure'); + Figures = flipud(Figures); + if ~isempty(Figures) + for f = 1:size(Figures,1) + if ~isempty(Figures(f).Number) + FigDiag = matlab.unittest.diagnostics.FigureDiagnostic(Figures(f),'Formats','png'); + log(testCase,1,FigDiag); + end + end + end + + % Close all figures and Simulink models + close all force + if any(matlab.addons.installedAddons().Name == "Simulink") + bdclose all + end + + % Rethrow error if any + if exist("ME","var") + if ~any(strcmp(ME.identifier,KnownIssuesID)) + rethrow(ME) + end + end + + end + + end % Test Methods + + methods (Access = private) + + function Path = CheckPreFile(testCase,Filename) + PreFile = "Pre"+replace(Filename,".mlx",".m"); + PreFilePath = fullfile(testCase.RootFolder,"SoftwareTests","PreFiles",PreFile); + if ~isfolder(fullfile(testCase.RootFolder,"SoftwareTests/PreFiles")) + mkdir(fullfile(testCase.RootFolder,"SoftwareTests/PreFiles")) + end + if ~isfile(PreFilePath) + writelines("% Pre-run script for "+Filename,PreFilePath) + writelines("% ---- Known Issues -----",PreFilePath,'WriteMode','append'); + writelines("KnownIssuesID = "+char(34)+char(34)+";",PreFilePath,'WriteMode','append'); + writelines("% ---- Pre-run commands -----",PreFilePath,'WriteMode','append'); + writelines(" ",PreFilePath,'WriteMode','append'); + end + Path = PreFilePath; + end + + function Path = CheckPostFile(testCase,Filename) + PostFile = "Post"+replace(Filename,".mlx",".m"); + PostFilePath = fullfile(testCase.RootFolder,"SoftwareTests","PostFiles",PostFile); + if ~isfolder(fullfile(testCase.RootFolder,"SoftwareTests/PostFiles")) + mkdir(fullfile(testCase.RootFolder,"SoftwareTests/PostFiles")) + end + if ~isfile(PostFilePath) + writelines("% Post-run script for "+Filename,PostFilePath) + writelines("% ---- Post-run commands -----",PostFilePath,'WriteMode','append'); + writelines(" ",PostFilePath,'WriteMode','append'); + end + Path = PostFilePath; + end + + end % Private Access Methods + +end % SolnSmokeTests diff --git a/SoftwareTests/TestResults_R2023b.txt b/SoftwareTests/TestResults_R2023b.txt new file mode 100644 index 0000000..0e943ef --- /dev/null +++ b/SoftwareTests/TestResults_R2023b.txt @@ -0,0 +1,15 @@ +Version,File,Status,ElapsedTime +R2023b,Antiderivatives.mlx,passed,1.174705e+01 +R2023b,AntiderivativesPractice.mlx,passed,1.237324e+00 +R2023b,AntiderivativesViz.mlx,passed,1.259872e+01 +R2023b,ByParts.mlx,passed,9.275476e+00 +R2023b,ByPartsPractice.mlx,passed,3.235664e+00 +R2023b,ByPartsViz.mlx,passed,8.701270e+00 +R2023b,FundamentalTheorem.mlx,passed,5.552346e+00 +R2023b,FundamentalTheoremPractice.mlx,passed,1.331846e+00 +R2023b,FundamentalTheoremViz.mlx,passed,3.044150e+00 +R2023b,Riemann.mlx,passed,7.073994e+01 +R2023b,RiemannViz.mlx,passed,5.730524e+01 +R2023b,Substitution.mlx,passed,1.642856e+01 +R2023b,SubstitutionPractice.mlx,passed,2.209729e+00 +R2023b,SubstitutionViz.mlx,passed,1.323952e+01 diff --git a/SoftwareTests/TestResults_R2024a.txt b/SoftwareTests/TestResults_R2024a.txt new file mode 100644 index 0000000..f04ea3f --- /dev/null +++ b/SoftwareTests/TestResults_R2024a.txt @@ -0,0 +1,7 @@ +Name,Passed,Failed,Incomplete,Duration,Details +SmokeTests[Project=0x0_char]/SmokeRun(Scripts=CombinationRules.mlx),1,0,0,0.0593681, +SmokeTests[Project=0x0_char]/SmokeRun(Scripts=Definition.mlx),1,0,0,0.0005363, +SmokeTests[Project=0x0_char]/SmokeRun(Scripts=PowerRules.mlx),1,0,0,76.614643, +SmokeTests[Project=0x0_char]/SmokeRun(Scripts=TaylorPolynomials.mlx),1,0,0,0.0017762, +SmokeTests[Project=0x0_char]/SmokeRun(Scripts=TranscendentalsRules.mlx),1,0,0,5.1318311, +FunctionTests/RunShowTaylor,1,0,0,3.5908922, diff --git a/Utilities/OldVersions/MainMenuOld.mlx b/Utilities/OldVersions/MainMenuOld.mlx deleted file mode 100644 index ce38b61..0000000 Binary files a/Utilities/OldVersions/MainMenuOld.mlx and /dev/null differ diff --git a/Utilities/OldVersions/READMEOld.mlx b/Utilities/OldVersions/READMEOld.mlx deleted file mode 100644 index a20752a..0000000 Binary files a/Utilities/OldVersions/READMEOld.mlx and /dev/null differ diff --git a/Utilities/ProjectShutdown.m b/Utilities/ProjectShutdown.m index fad7d2a..8c3c77c 100644 --- a/Utilities/ProjectShutdown.m +++ b/Utilities/ProjectShutdown.m @@ -1,24 +1,2 @@ -function ProjectShutdown -% Reset module to original state that is expected when loading in a new -% MATLAB version. -proj = currentProject; -if isMATLABReleaseOlderThan("R2023b") - cd(proj.RootFolder) - try - if exist(fullfile("Utilities","OldVersions","MainMenuNew.mlx"),"file") - movefile("MainMenu.mlx", fullfile("Utilities","OldVersions","MainMenuOld.mlx")) - movefile(fullfile("Utilities","OldVersions","MainMenuNew.mlx"),fullfile(proj.RootFolder,"MainMenu.mlx")) - end - catch - disp("Failed to move MainMenu.mlx.") - end - try - if exist(fullfile("Utilities","OldVersions","READMENew.mlx"),"file") - movefile("README.mlx", fullfile("Utilities","OldVersions","READMEOld.mlx")) - movefile(fullfile("Utilities","OldVersions","READMENew.mlx"),fullfile(proj.RootFolder,"README.mlx")) - end - catch - disp("Failed to move README.mlx.") - end -end -end \ No newline at end of file +% Close the StartUp app if still open: +delete(findall(groot,'Name','StartUp App')) \ No newline at end of file diff --git a/Utilities/ProjectStartup.m b/Utilities/ProjectStartup.m deleted file mode 100644 index 8f32d08..0000000 --- a/Utilities/ProjectStartup.m +++ /dev/null @@ -1,24 +0,0 @@ -function ProjectStartup -% Set up check for version number -proj = currentProject; -if isMATLABReleaseOlderThan("R2023b") - cd(proj.RootFolder) - try - if exist(fullfile("Utilities","OldVersions","MainMenuOld.mlx"),"file") - movefile("MainMenu.mlx", fullfile("Utilities","OldVersions","MainMenuNew.mlx")) - movefile(fullfile("Utilities","OldVersions","MainMenuOld.mlx"),fullfile(proj.RootFolder,"MainMenu.mlx")) - end - catch - disp("Failed to move MainMenu.mlx.") - end - try - if exist(fullfile("Utilities","OldVersions","READMEOld.mlx"),"file") - movefile("README.mlx", fullfile("Utilities","OldVersions","READMENew.mlx")) - movefile(fullfile("Utilities","OldVersions","READMEOld.mlx"),fullfile(proj.RootFolder,"README.mlx")) - end - catch - disp("Failed to move README.mlx.") - end -end -ProjectStartupApp -end \ No newline at end of file diff --git a/Utilities/ProjectStartupApp.m b/Utilities/ProjectStartupApp.m index 0f84d75..a0319fe 100644 --- a/Utilities/ProjectStartupApp.m +++ b/Utilities/ProjectStartupApp.m @@ -2,21 +2,21 @@ % Properties that correspond to app components properties (Access = public) - UIFigure matlab.ui.Figure - TabGroup matlab.ui.container.TabGroup - WelcomeTab matlab.ui.container.Tab - Image matlab.ui.control.Image - READMEButton matlab.ui.control.Button - ReviewUsButton matlab.ui.control.Button - MainMenuButton matlab.ui.control.Button - WelcomeTitle matlab.ui.control.Label - TabReview matlab.ui.container.Tab - OtherButton matlab.ui.control.Button - StudentButton matlab.ui.control.Button - FacultyButton matlab.ui.control.Button - Q1 matlab.ui.control.Label - ReviewTitle matlab.ui.control.Label - ReviewText matlab.ui.control.Label + StartUpAppUIFigure matlab.ui.Figure + TabGroup matlab.ui.container.TabGroup + WelcomeTab matlab.ui.container.Tab + Image matlab.ui.control.Image + READMEButton matlab.ui.control.Button + ReviewUsButton matlab.ui.control.Button + MainMenuButton matlab.ui.control.Button + WelcomeTitle matlab.ui.control.Label + TabReview matlab.ui.container.Tab + OtherButton matlab.ui.control.Button + StudentButton matlab.ui.control.Button + FacultyButton matlab.ui.control.Button + Q1 matlab.ui.control.Label + ReviewTitle matlab.ui.control.Label + ReviewText matlab.ui.control.Label end @@ -97,9 +97,6 @@ function saveSettings(isReviewed,numLoad) % Code that executes after component creation function startupFcn(app) - - % Move gui to center of screen - movegui(app.UIFigure,"center") % Switch tab to review if has not been reviewed yet if isfile(fullfile("Utilities","ProjectSettings.mat")) @@ -132,14 +129,14 @@ function startupFcn(app) Request.Header = HeaderField("X-GitHub-Api-Version","2022-11-28"); Request.Header(2) = HeaderField("Accept","application/vnd.github+json"); [Answer,~,~] = send(Request,Address); - websave(fullfile("Utilities/SurveyLinks.mat"),Answer.Body.Data.download_url) + websave(fullfile("Utilities/SurveyLinks.mat"),Answer.Body.Data.download_url); catch end end - % Close request function: UIFigure - function UIFigureCloseRequest(app, event) + % Close request function: StartUpAppUIFigure + function StartUpAppUIFigureCloseRequest(app, event) if event.Source == app.READMEButton open README.mlx elseif event.Source == app.MainMenuButton @@ -158,28 +155,28 @@ function UIFigureCloseRequest(app, event) % Button pushed function: MainMenuButton function MainMenuButtonPushed(app, event) - UIFigureCloseRequest(app,event) + StartUpAppUIFigureCloseRequest(app,event) end % Button pushed function: FacultyButton function FacultyButtonPushed(app, event) app.pingSway; app.openFacultyForm; - UIFigureCloseRequest(app,event) + StartUpAppUIFigureCloseRequest(app,event) end % Button pushed function: StudentButton function StudentButtonPushed(app, event) app.pingSway; app.openStudentForm; - UIFigureCloseRequest(app,event) + StartUpAppUIFigureCloseRequest(app,event) end % Button pushed function: OtherButton function OtherButtonPushed(app, event) app.pingSway; app.openStudentForm; - UIFigureCloseRequest(app,event) + StartUpAppUIFigureCloseRequest(app,event) end % Button pushed function: ReviewUsButton @@ -189,7 +186,7 @@ function ReviewUsButtonPushed(app, event) % Button pushed function: READMEButton function READMEButtonPushed(app, event) - UIFigureCloseRequest(app,event) + StartUpAppUIFigureCloseRequest(app,event) end end @@ -199,17 +196,16 @@ function READMEButtonPushed(app, event) % Create UIFigure and components function createComponents(app) - % Create UIFigure and hide until all components are created - app.UIFigure = uifigure('Visible', 'off'); - app.UIFigure.AutoResizeChildren = 'off'; - app.UIFigure.Color = [0.129411764705882 0.129411764705882 0.129411764705882]; - app.UIFigure.Position = [100 100 276 430]; - app.UIFigure.Name = 'MATLAB App'; - app.UIFigure.Resize = 'off'; - app.UIFigure.CloseRequestFcn = createCallbackFcn(app, @UIFigureCloseRequest, true); + % Create StartUpAppUIFigure and hide until all components are created + app.StartUpAppUIFigure = uifigure('Visible', 'off'); + app.StartUpAppUIFigure.AutoResizeChildren = 'off'; + app.StartUpAppUIFigure.Position = [100 100 276 430]; + app.StartUpAppUIFigure.Name = 'StartUp App'; + app.StartUpAppUIFigure.Resize = 'off'; + app.StartUpAppUIFigure.CloseRequestFcn = createCallbackFcn(app, @StartUpAppUIFigureCloseRequest, true); % Create TabGroup - app.TabGroup = uitabgroup(app.UIFigure); + app.TabGroup = uitabgroup(app.StartUpAppUIFigure); app.TabGroup.AutoResizeChildren = 'off'; app.TabGroup.Position = [1 1 276 460]; @@ -217,8 +213,6 @@ function createComponents(app) app.WelcomeTab = uitab(app.TabGroup); app.WelcomeTab.AutoResizeChildren = 'off'; app.WelcomeTab.Title = 'Tab'; - app.WelcomeTab.BackgroundColor = [0.129411764705882 0.129411764705882 0.129411764705882]; - app.WelcomeTab.ForegroundColor = [0.850980392156863 0.850980392156863 0.850980392156863]; % Create WelcomeTitle app.WelcomeTitle = uilabel(app.WelcomeTab); @@ -229,7 +223,7 @@ function createComponents(app) app.WelcomeTitle.FontWeight = 'bold'; app.WelcomeTitle.FontColor = [0.850980392156863 0.850980392156863 0.850980392156863]; app.WelcomeTitle.Position = [2 349 274 70]; - app.WelcomeTitle.Text = 'Welcome to Calculus: Integrals'; + app.WelcomeTitle.Text = ' Welcome to Calculus: Integrals'; % Create MainMenuButton app.MainMenuButton = uibutton(app.WelcomeTab, 'push'); @@ -267,8 +261,6 @@ function createComponents(app) app.TabReview = uitab(app.TabGroup); app.TabReview.AutoResizeChildren = 'off'; app.TabReview.Title = 'Tab2'; - app.TabReview.BackgroundColor = [0.129411764705882 0.129411764705882 0.129411764705882]; - app.TabReview.ForegroundColor = [0.850980392156863 0.850980392156863 0.850980392156863]; app.TabReview.HandleVisibility = 'off'; % Create ReviewText @@ -279,7 +271,7 @@ function createComponents(app) app.ReviewText.FontSize = 18; app.ReviewText.FontColor = [0.850980392156863 0.850980392156863 0.850980392156863]; app.ReviewText.Position = [16 243 245 69]; - app.ReviewText.Text = 'Plese help us improve your experience by answering a few questions.'; + app.ReviewText.Text = 'Please help us improve your experience by answering a few questions.'; % Create ReviewTitle app.ReviewTitle = uilabel(app.TabReview); @@ -290,7 +282,7 @@ function createComponents(app) app.ReviewTitle.FontWeight = 'bold'; app.ReviewTitle.FontColor = [0.850980392156863 0.850980392156863 0.850980392156863]; app.ReviewTitle.Position = [2 326 274 93]; - app.ReviewTitle.Text = 'Welcome to Calculus: Integrals'; + app.ReviewTitle.Text = ' Welcome to Calculus: Integrals'; % Create Q1 app.Q1 = uilabel(app.TabReview); @@ -301,7 +293,7 @@ function createComponents(app) app.Q1.FontWeight = 'bold'; app.Q1.FontColor = [0.850980392156863 0.850980392156863 0.850980392156863]; app.Q1.Position = [16 141 245 69]; - app.Q1.Text = 'What describe you best?'; + app.Q1.Text = 'What describes you best?'; % Create FacultyButton app.FacultyButton = uibutton(app.TabReview, 'push'); @@ -331,7 +323,7 @@ function createComponents(app) app.OtherButton.Text = 'Other'; % Show the figure after all components are created - app.UIFigure.Visible = 'on'; + app.StartUpAppUIFigure.Visible = 'on'; end end @@ -345,7 +337,7 @@ function createComponents(app) createComponents(app) % Register the app with App Designer - registerApp(app, app.UIFigure) + registerApp(app, app.StartUpAppUIFigure) % Execute the startup function runStartupFcn(app, @startupFcn) @@ -359,7 +351,7 @@ function createComponents(app) function delete(app) % Delete UIFigure when app is deleted - delete(app.UIFigure) + delete(app.StartUpAppUIFigure) end end end \ No newline at end of file diff --git a/buildutil/badgesforModule.m b/buildutil/badgesforModule.m deleted file mode 100644 index d2d321c..0000000 --- a/buildutil/badgesforModule.m +++ /dev/null @@ -1,46 +0,0 @@ -function badgesforModule(rootDir) - %BADGESFORMODULE Take the test reports from the runs against multiple releases, and generate the "Tested with" badge - arguments - rootDir (1,1) string = pwd(); - end - - releasesTestedWith = ""; - releasesFailed = 0; - % Go through the R2* directories and extract the failed test info - releaseDirectoryInfo = dir(fullfile(rootDir,"report")); - % Select only folders - releaseDirectoryInfo = releaseDirectoryInfo([releaseDirectoryInfo.isdir]); - % with a name like R2* - releaseDirectoryInfo = releaseDirectoryInfo(startsWith(string({releaseDirectoryInfo.name}),"R2","IgnoreCase",true)); - % go through the directories and check if tests passed - for iReleaseDirectoryInfo = 1:numel(releaseDirectoryInfo) - releaseName = string(releaseDirectoryInfo(iReleaseDirectoryInfo).name); - testresultsFilename = fullfile(releaseDirectoryInfo(iReleaseDirectoryInfo).folder,releaseName,"test-results.xml"); - % Read the test results file - testResults = readstruct(testresultsFilename); - % If no tests failed, errors, or were skipped, then add it to the list - if testResults.testsuite.errorsAttribute == 0 && testResults.testsuite.failuresAttribute == 0 && testResults.testsuite.skippedAttribute == 0 - if releasesTestedWith ~= "" - % Insert the seperator between released after the first one - releasesTestedWith = releasesTestedWith + " | "; - end - releasesTestedWith = releasesTestedWith + releaseName; - else - releasesFailed = releasesFailed + 1; - end - end - if releasesTestedWith ~= "" - switch releasesFailed - case 0 - badgecolor = "success"; % Also called brightgreen - case 1 - badgecolor = "orange"; - case 2 - badgecolor = "yellow"; - otherwise - badgecolor = "red"; - end - writeBadgeJSONFile("tested with", releasesTestedWith, badgecolor) - end -end - diff --git a/buildutil/buildModule.m b/buildutil/buildModule.m deleted file mode 100644 index 5159932..0000000 --- a/buildutil/buildModule.m +++ /dev/null @@ -1,23 +0,0 @@ -function buildModule - - % Set an earliest usable MATLAB version check here - if isMATLABReleaseOlderThan("R2021a") - error("Integrals:releaseFromLatest","This module was designed for R2021b or later.") - end - - prj = currentProject; - rootDir = prj.RootFolder; - - % Check for code issues - codecheckModule(rootDir); - disp("code check complete."); - - releaseInfo = matlabRelease; - - % Run unit tests and capture code coverage - testModule("ReportSubdirectory",releaseInfo.Release) - % Update Badges for GitHub.com - badgesforModule(rootDir) - disp("test complete"); - -end diff --git a/buildutil/codecheckModule.m b/buildutil/codecheckModule.m deleted file mode 100644 index 75e4970..0000000 --- a/buildutil/codecheckModule.m +++ /dev/null @@ -1,52 +0,0 @@ -function codecheckModule(rootDir) - arguments - rootDir (1,1) string = pwd(); - end - - moduleFileInfo = dir(fullfile(rootDir,"**","*.mlx*")); - filesToCheck = fullfile(string({moduleFileInfo.folder}'),string({moduleFileInfo.name}')); - - additionalFileInfo = dir(fullfile(rootDir,"**","*.m")); - filesToCheck = [filesToCheck;fullfile(string({additionalFileInfo.folder}'),string({additionalFileInfo.name}'))]; - - if isempty(filesToCheck) - error("Integrals:codeissues","No files to check.") - end - - if verLessThan('matlab','9.13') - % Use the old check code before R2022b - issues = checkcode(filesToCheck); - issues = [issues{:}]; - issueCount = size(issues,1); - else - % Use the new code analyzer in R2022b and later - issues = codeIssues(filesToCheck); - issueCount = size(issues.Issues,1); - end - - fprintf("checked %d files with %d issue(s).\n",numel(filesToCheck),issueCount) - - % Generate the JSON files for the shields in the readme.md - switch issueCount - case 0 - color = "success"; - case 1 - color = "yellow"; - otherwise - color = "red"; - end - writeBadgeJSONFile("code issues",string(issueCount), color) - - if issueCount ~= 0 - if verLessThan('matlab','9.13') - % pre R2022b, run checkcode without a RHS argument to display issues - checkcode(filesToCheck) - else - % R2022b and later, just display issues - disp(issues) - end - error("Integrals:codeissues","Calculus-Integrals requires all code check issues be resolved.") - end -end - -%#ok<*CTPCT> \ No newline at end of file diff --git a/buildutil/testModule.m b/buildutil/testModule.m deleted file mode 100644 index 6e322f3..0000000 --- a/buildutil/testModule.m +++ /dev/null @@ -1,54 +0,0 @@ -function testModule(options) - %RUNTESTWITHCODECOVERAGE Summary of this function goes here - % Detailed explanation goes here - - arguments - options.RunSmokeTests logical = true; - options.RunFunctionTests logical = true - options.ModuleName (1,1) string = "Integrals.prj"; - options.ReportSubdirectory (1,1) string = ""; - end - - import matlab.unittest.TestSuite; - import matlab.unittest.TestRunner; - import matlab.unittest.Verbosity; - import matlab.unittest.plugins.XMLPlugin; - % import matlab.unittest.selectors.HasTag; - - oldpath = addpath("tests",genpath(extractBefore(pwd,"buildutil"))); - finalize = onCleanup(@()(path(oldpath))); - openProject(options.ModuleName); - - outputDirectory = fullfile("report",options.ReportSubdirectory); - if isempty(dir(outputDirectory)) - mkdir(outputDirectory) - end - - smokeSuite = TestSuite.fromClass(?smokeTests); - functionSuite = TestSuite.fromClass(?functionTests); - - runner = TestRunner.withTextOutput('OutputDetail', Verbosity.Detailed); - - runner.addPlugin(XMLPlugin.producingJUnitFormat(fullfile(outputDirectory,'test-results.xml'))); - - if options.RunSmokeTests - smokeResults = runner.run(smokeSuite); - if ~verLessThan('matlab','9.9') && ~isMATLABReleaseOlderThan("R2022a") - % This report is only available in R2022a and later. - % isMATLABReleaseOlderThan wasn't added until MATLAB 2020b / version 9.9 - smokeResults.generateHTMLReport(outputDirectory,'MainFile',"testreport.html"); - end - disp(table(smokeResults)) - end - if options.RunFunctionTests - functionResults = runner.run(functionSuite); - disp(table(functionResults)) - end - - if options.RunSmokeTests - smokeResults.assertSuccess() - end - if options.RunFunctionTests - functionResults.assertSuccess() - end -end diff --git a/buildutil/writeBadgeJSONFile.m b/buildutil/writeBadgeJSONFile.m deleted file mode 100644 index 5984ba3..0000000 --- a/buildutil/writeBadgeJSONFile.m +++ /dev/null @@ -1,29 +0,0 @@ -function writeBadgeJSONFile(label,message,color) - - arguments - label (1,1) string - message (1,1) string - color (1,1) string {mustBeMember(color,["success","red","green","blue","orange","yellow"])} - end - outputDirectory = fullfile("report","badge"); - if isempty(dir(outputDirectory)) - mkdir(outputDirectory) - end - badgeInfo = struct; - badgeInfo.schemaVersion = 1; - badgeInfo.label = label; - badgeInfo.message = message; - badgeInfo.color = color; - badgeJSON = jsonencode(badgeInfo); - - name = strrep(label," ","_"); - fid = fopen(fullfile(outputDirectory,name + ".json"),"w"); - try - fwrite(fid,badgeJSON); - catch e - fclose(fid); - rethrow e - end - fclose(fid); - -end diff --git a/report/R2022b/[Content_Types].xml b/report/R2022b/[Content_Types].xml deleted file mode 100644 index 44d21b8..0000000 --- a/report/R2022b/[Content_Types].xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/report/R2022b/_rels/.rels b/report/R2022b/_rels/.rels deleted file mode 100644 index d7b3f5b..0000000 --- a/report/R2022b/_rels/.rels +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/report/R2022b/_rels/index.html.rels b/report/R2022b/_rels/index.html.rels deleted file mode 100644 index a42d8c9..0000000 --- a/report/R2022b/_rels/index.html.rels +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/report/R2022b/images/image1.png b/report/R2022b/images/image1.png deleted file mode 100644 index 8dcd15e..0000000 Binary files a/report/R2022b/images/image1.png and /dev/null differ diff --git a/report/R2022b/images/image2.svg b/report/R2022b/images/image2.svg deleted file mode 100644 index f4f4de0..0000000 --- a/report/R2022b/images/image2.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - diff --git a/report/R2022b/stylesheets/combined.css b/report/R2022b/stylesheets/combined.css deleted file mode 100644 index 5a3c88b..0000000 --- a/report/R2022b/stylesheets/combined.css +++ /dev/null @@ -1,405 +0,0 @@ -ul.EventSummaryText { margin: 0pt 0pt 0pt 20pt; list-style-type: circle; padding: 0pt; } -table.EventTable { width: 100%; margin-bottom: 6pt; table-layout: fixed; } -table.EventTable td.IndentCell { width: 20pt; } -table.EventTable td.ContentCell { border-left: 1px solid #D9E2F3; padding-left: 0.08in; padding-right: 0.08in; } -span.InlineLabel { font-size: 10pt; letter-spacing:0.5pt; font-style: italic; } -span.InlineText { font-size: 9pt; } -p.CodeParagraph { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 8pt; margin-left: 5pt; padding: 2pt 5pt 2pt 5pt;; max-height: 200pt; max-width: 100%; overflow: auto; background-color: #F2F2F2; display: inline-block; white-space: pre; word-break: normal; } -p.BoldText { font-weight: bold; } -span.InternalLink { color: #2E74B5; text-decoration: underline; font-style: italic; } -span.InternalLink:hover { font-weight: bold; } -p.TenPoint { font-size: 10pt; } -p.EightPoint { font-size: 8pt; } -p.BaseFolder { text-decoration: underline; } -p.BaseFolder a { color: black; } -p.BaseFolder a:hover { color: #2E74B5; } -p.SpaceAfterTestParentOverviewParts { font-size: 1pt; margin-bottom:6pt; } -p.PieChartContainer { margin-top: 2pt; margin-bottom: 2pt; text-align: center; } -p.CommandWindowText { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 9pt; border: 1px solid #A6A6A6; padding-top: 1pt; padding-bottom: 1pt; padding-left: 4pt; padding-right: 4pt; max-height:400pt; overflow: auto; white-space: pre; word-break: normal; } -h1.CoverPageTitle { font-size: 36pt; text-align: center; } -table.CoverPageTable { margin-top: 10pt; width: 100%; table-layout: fixed; } -table.CoverPageTable p { font-size: 14pt; } -table.CoverPageTable td { padding-left: 6pt; padding-right: 6pt; vertical-align: top; } -table.CoverPageTable td.CoverPageTableLabel { width: 47%; } -table.CoverPageTable td.CoverPageTableLabel p { text-align: right; } -table.CoverPageTable td.CoverPageTableValue { width: 53%; } -p.TopMargin { margin-top: 20pt; } -p.DiagnosticLabel { font-size: 10pt; letter-spacing:0.5pt; font-style: italic; } -p.EventsLabel { } -p.FailureSummaryText { margin-bottom: 8pt; } -table.FailureSummaryTable { width: 100%; } -table.FailureSummaryTable td { padding-left: 6pt; padding-right: 6pt; } -table.FailureSummaryTable a { color: black; text-decoration: none; } -table.FailureSummaryTable a:hover { color: #2E74B5; text-decoration: underline; } -table.FailureSummaryTable td.FailureSummaryTableIndentColumn { width: 0.2in; } -table.FailureSummaryTable td.TestNameColumn { border-bottom: 1px solid #D0CECE; } -table.FailureSummaryTable td.ReasonsColumn { border-bottom: 1px solid #D0CECE; width: 1.6in; } -table.FailureSummaryTable td.DetailsLinkColumn { text-align: right; width: 0.75in; } -table.FailureSummaryTable tr.FailureSummaryRow p { margin-top: 3pt; } -p.FilterSummaryText { margin-bottom: 8pt; } -table.FilterSummaryTable { width: 100%; } -table.FilterSummaryTable td { padding-left: 6pt; padding-right: 6pt; } -table.FilterSummaryTable a { color: black; text-decoration: none; } -table.FilterSummaryTable a:hover { color: #2E74B5; text-decoration: underline; } -table.FilterSummaryTable td.FilteredSummaryTableIndentColumn { width: 0.2in; } -table.FilterSummaryTable td.TestNameColumn { border-bottom: 1px solid #D0CECE; } -table.FilterSummaryTable td.DetailsLinkColumn { text-align: right; width: 0.7in; } -table.FilterSummaryTable tr.FilterSummaryRow p { margin-top: 3pt; } -h1.Heading1 { font-size: 18pt; letter-spacing: 1pt; border-bottom: 1px solid #ED7D31; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; margin-bottom: 6pt; padding-left: 4pt; } -h2.Heading2 { font-size: 12pt; letter-spacing: 2pt; font-weight: bold; color: white; background-color: #4471C4; border-left: 8pt solid #4471C4; border-top: 4pt solid #4471C4; border-right: 8pt solid #4471C4; border-bottom: 4pt solid #4471C4; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; } -h3.Heading3 { font-size: 12pt; letter-spacing: 2pt; background-color: #D9E2F3; border-left: 8pt solid #D9E2F3; border-top: 4pt solid #D9E2F3; border-right: 8pt solid #D9E2F3; border-bottom: 4pt solid #D9E2F3; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; } -h4.Heading4 { font-size: 11pt; letter-spacing: 1pt; color: #2F5496; border-left: 1px dashed #4471C4; border-top: 1px dashed #4471C4; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; margin-bottom: 10pt; padding-top: 2pt; padding-left: 6pt; } -h5.Heading5 { font-size: 11pt; font-weight: bold; margin-top: 8pt; margin-bottom: 8pt; } -div.NavigationPane { padding: 0pt 10pt 25pt 10pt; position: fixed; right: 10pt; top: 0pt; border-radius: 0pt 0pt 10pt 10pt; z-index: 9999; margin-top: -34pt; background: #F0F0F0; width: 50pt; height: 50%; max-height: 30pt; border-style: solid; border-width: 0px 1px 1px 1px; border-color: #BBBBBB; } -div.NavigationPane.open { transition: all 0.5s ease; margin-top: 0pt; height: 50%; max-height: 50%; width: auto; max-width: 50%; } -div.NavigationBox { width: 100%; height: 100%; overflow: auto; border-width: 0px 0px 1px 0px; border-style: solid; border-color: #DDDDDD; padding-right: 10px; } -div.NavigationBox ul { font-size: 9pt; padding-left: 10pt; } -div.NavigationBox ul p { white-space: pre; word-break: normal; } -div.NavigationBox ul a { color: black; text-decoration: none; } -div.NavigationBox ul a:hover { color: #2E74B5; } -div.ArrowBox { height: 25pt; } -div.ArrowBox p { text-align: center; font-size: 18pt; color: #BBBBBB; } -div.ArrowBox:hover { cursor: pointer; } -div.ArrowBox:hover p { color: #2E74B5; } -::-webkit-scrollbar-corner { background: #F0F0F0; } -p.LeftArtifactImageParagraph { margin-top: 2pt; margin-bottom: 2pt; margin-left: 10pt; } -p.LeftArtifactImageParagraph img:hover { cursor: pointer; } -p.SingleCenteredHolePart { text-align: center; } -p.StackTextParagraph { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 7pt; margin-left: 5pt; padding: 2pt 5pt 2pt 5pt; max-height: 100pt; max-width: 100%; display: inline-block; overflow: auto; } -p.TestDetails { margin-bottom: 8pt; } -p.OverviewLinkParagraph { font-size: 8pt; text-align: right; } -table.TestParentBox { margin-top: 3pt; margin-bottom: 6pt; width: 100%; } -table.TestParentBox td.IndentCell { width:0.2in; } -table.TestParentBox td.TestParentNameCell { border-left:1px solid #E6E6E6; border-top: 1px solid #E6E6E6; margin-left: 3pt; margin-top: 1pt; } -table.TestParentBox td.TestParentNameCell p { text-decoration: underline; font-size: 10pt; } -table.TestParentBox td.TestParentNameCell a { color: black; } -table.TestParentBox td.TestParentNameCell a:hover { color: #2E74B5; } -table.TestParentBox td.TotalDurationTextCell { width: 1.2in; text-align: right; border-right:1px solid #E6E6E6; border-top: 1px solid #E6E6E6; margin-top: 1pt; margin-right: 3pt; } -table.TestParentBox td.TotalDurationTextCell p { font-size: 10pt; } -table.TestParentBox td.ResultsIconsCell { border-left: 1px solid #E6E6E6; border-right: 1px solid #E6E6E6; border-bottom: 1px solid #E6E6E6; margin-left: 3pt; margin-right: 3pt; margin-bottom: 1pt; } -table.TestParentBox td.ResultsIconsCell p { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 2pt; line-height: 4pt; } -table.TestParentBox td.ResultsIconsCell img:hover { transform: scale(1.75); transition: transform 0.2s ease; } -ul.EventSummaryText { margin: 0pt 0pt 0pt 20pt; list-style-type: circle; padding: 0pt; } -table.EventTable { width: 100%; margin-bottom: 6pt; table-layout: fixed; } -table.EventTable td.IndentCell { width: 20pt; } -table.EventTable td.ContentCell { border-left: 1px solid #D9E2F3; padding-left: 0.08in; padding-right: 0.08in; } -span.InlineLabel { font-size: 10pt; letter-spacing:0.5pt; font-style: italic; } -span.InlineText { font-size: 9pt; } -p.CodeParagraph { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 8pt; margin-left: 5pt; padding: 2pt 5pt 2pt 5pt;; max-height: 200pt; max-width: 100%; overflow: auto; background-color: #F2F2F2; display: inline-block; white-space: pre; word-break: normal; } -p.BoldText { font-weight: bold; } -span.InternalLink { color: #2E74B5; text-decoration: underline; font-style: italic; } -span.InternalLink:hover { font-weight: bold; } -p.TenPoint { font-size: 10pt; } -p.EightPoint { font-size: 8pt; } -p.BaseFolder { text-decoration: underline; } -p.BaseFolder a { color: black; } -p.BaseFolder a:hover { color: #2E74B5; } -p.SpaceAfterTestParentOverviewParts { font-size: 1pt; margin-bottom:6pt; } -p.PieChartContainer { margin-top: 2pt; margin-bottom: 2pt; text-align: center; } -p.CommandWindowText { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 9pt; border: 1px solid #A6A6A6; padding-top: 1pt; padding-bottom: 1pt; padding-left: 4pt; padding-right: 4pt; max-height:400pt; overflow: auto; white-space: pre; word-break: normal; } -h1.CoverPageTitle { font-size: 36pt; text-align: center; } -table.CoverPageTable { margin-top: 10pt; width: 100%; table-layout: fixed; } -table.CoverPageTable p { font-size: 14pt; } -table.CoverPageTable td { padding-left: 6pt; padding-right: 6pt; vertical-align: top; } -table.CoverPageTable td.CoverPageTableLabel { width: 47%; } -table.CoverPageTable td.CoverPageTableLabel p { text-align: right; } -table.CoverPageTable td.CoverPageTableValue { width: 53%; } -p.TopMargin { margin-top: 20pt; } -p.DiagnosticLabel { font-size: 10pt; letter-spacing:0.5pt; font-style: italic; } -p.EventsLabel { } -p.FailureSummaryText { margin-bottom: 8pt; } -table.FailureSummaryTable { width: 100%; } -table.FailureSummaryTable td { padding-left: 6pt; padding-right: 6pt; } -table.FailureSummaryTable a { color: black; text-decoration: none; } -table.FailureSummaryTable a:hover { color: #2E74B5; text-decoration: underline; } -table.FailureSummaryTable td.FailureSummaryTableIndentColumn { width: 0.2in; } -table.FailureSummaryTable td.TestNameColumn { border-bottom: 1px solid #D0CECE; } -table.FailureSummaryTable td.ReasonsColumn { border-bottom: 1px solid #D0CECE; width: 1.6in; } -table.FailureSummaryTable td.DetailsLinkColumn { text-align: right; width: 0.75in; } -table.FailureSummaryTable tr.FailureSummaryRow p { margin-top: 3pt; } -p.FilterSummaryText { margin-bottom: 8pt; } -table.FilterSummaryTable { width: 100%; } -table.FilterSummaryTable td { padding-left: 6pt; padding-right: 6pt; } -table.FilterSummaryTable a { color: black; text-decoration: none; } -table.FilterSummaryTable a:hover { color: #2E74B5; text-decoration: underline; } -table.FilterSummaryTable td.FilteredSummaryTableIndentColumn { width: 0.2in; } -table.FilterSummaryTable td.TestNameColumn { border-bottom: 1px solid #D0CECE; } -table.FilterSummaryTable td.DetailsLinkColumn { text-align: right; width: 0.7in; } -table.FilterSummaryTable tr.FilterSummaryRow p { margin-top: 3pt; } -h1.Heading1 { font-size: 18pt; letter-spacing: 1pt; border-bottom: 1px solid #ED7D31; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; margin-bottom: 6pt; padding-left: 4pt; } -h2.Heading2 { font-size: 12pt; letter-spacing: 2pt; font-weight: bold; color: white; background-color: #4471C4; border-left: 8pt solid #4471C4; border-top: 4pt solid #4471C4; border-right: 8pt solid #4471C4; border-bottom: 4pt solid #4471C4; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; } -h3.Heading3 { font-size: 12pt; letter-spacing: 2pt; background-color: #D9E2F3; border-left: 8pt solid #D9E2F3; border-top: 4pt solid #D9E2F3; border-right: 8pt solid #D9E2F3; border-bottom: 4pt solid #D9E2F3; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; } -h4.Heading4 { font-size: 11pt; letter-spacing: 1pt; color: #2F5496; border-left: 1px dashed #4471C4; border-top: 1px dashed #4471C4; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; margin-bottom: 10pt; padding-top: 2pt; padding-left: 6pt; } -h5.Heading5 { font-size: 11pt; font-weight: bold; margin-top: 8pt; margin-bottom: 8pt; } -div.NavigationPane { padding: 0pt 10pt 25pt 10pt; position: fixed; right: 10pt; top: 0pt; border-radius: 0pt 0pt 10pt 10pt; z-index: 9999; margin-top: -34pt; background: #F0F0F0; width: 50pt; height: 50%; max-height: 30pt; border-style: solid; border-width: 0px 1px 1px 1px; border-color: #BBBBBB; } -div.NavigationPane.open { transition: all 0.5s ease; margin-top: 0pt; height: 50%; max-height: 50%; width: auto; max-width: 50%; } -div.NavigationBox { width: 100%; height: 100%; overflow: auto; border-width: 0px 0px 1px 0px; border-style: solid; border-color: #DDDDDD; padding-right: 10px; } -div.NavigationBox ul { font-size: 9pt; padding-left: 10pt; } -div.NavigationBox ul p { white-space: pre; word-break: normal; } -div.NavigationBox ul a { color: black; text-decoration: none; } -div.NavigationBox ul a:hover { color: #2E74B5; } -div.ArrowBox { height: 25pt; } -div.ArrowBox p { text-align: center; font-size: 18pt; color: #BBBBBB; } -div.ArrowBox:hover { cursor: pointer; } -div.ArrowBox:hover p { color: #2E74B5; } -::-webkit-scrollbar-corner { background: #F0F0F0; } -p.LeftArtifactImageParagraph { margin-top: 2pt; margin-bottom: 2pt; margin-left: 10pt; } -p.LeftArtifactImageParagraph img:hover { cursor: pointer; } -p.SingleCenteredHolePart { text-align: center; } -p.StackTextParagraph { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 7pt; margin-left: 5pt; padding: 2pt 5pt 2pt 5pt; max-height: 100pt; max-width: 100%; display: inline-block; overflow: auto; } -p.TestDetails { margin-bottom: 8pt; } -p.OverviewLinkParagraph { font-size: 8pt; text-align: right; } -table.TestParentBox { margin-top: 3pt; margin-bottom: 6pt; width: 100%; } -table.TestParentBox td.IndentCell { width:0.2in; } -table.TestParentBox td.TestParentNameCell { border-left:1px solid #E6E6E6; border-top: 1px solid #E6E6E6; margin-left: 3pt; margin-top: 1pt; } -table.TestParentBox td.TestParentNameCell p { text-decoration: underline; font-size: 10pt; } -table.TestParentBox td.TestParentNameCell a { color: black; } -table.TestParentBox td.TestParentNameCell a:hover { color: #2E74B5; } -table.TestParentBox td.TotalDurationTextCell { width: 1.2in; text-align: right; border-right:1px solid #E6E6E6; border-top: 1px solid #E6E6E6; margin-top: 1pt; margin-right: 3pt; } -table.TestParentBox td.TotalDurationTextCell p { font-size: 10pt; } -table.TestParentBox td.ResultsIconsCell { border-left: 1px solid #E6E6E6; border-right: 1px solid #E6E6E6; border-bottom: 1px solid #E6E6E6; margin-left: 3pt; margin-right: 3pt; margin-bottom: 1pt; } -table.TestParentBox td.ResultsIconsCell p { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 2pt; line-height: 4pt; } -table.TestParentBox td.ResultsIconsCell img:hover { transform: scale(1.75); transition: transform 0.2s ease; } -ul.EventSummaryText { margin: 0pt 0pt 0pt 20pt; list-style-type: circle; padding: 0pt; } -table.EventTable { width: 100%; margin-bottom: 6pt; table-layout: fixed; } -table.EventTable td.IndentCell { width: 20pt; } -table.EventTable td.ContentCell { border-left: 1px solid #D9E2F3; padding-left: 0.08in; padding-right: 0.08in; } -span.InlineLabel { font-size: 10pt; letter-spacing:0.5pt; font-style: italic; } -span.InlineText { font-size: 9pt; } -p.CodeParagraph { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 8pt; margin-left: 5pt; padding: 2pt 5pt 2pt 5pt;; max-height: 200pt; max-width: 100%; overflow: auto; background-color: #F2F2F2; display: inline-block; white-space: pre; word-break: normal; } -p.BoldText { font-weight: bold; } -span.InternalLink { color: #2E74B5; text-decoration: underline; font-style: italic; } -span.InternalLink:hover { font-weight: bold; } -p.TenPoint { font-size: 10pt; } -p.EightPoint { font-size: 8pt; } -p.BaseFolder { text-decoration: underline; } -p.BaseFolder a { color: black; } -p.BaseFolder a:hover { color: #2E74B5; } -p.SpaceAfterTestParentOverviewParts { font-size: 1pt; margin-bottom:6pt; } -p.PieChartContainer { margin-top: 2pt; margin-bottom: 2pt; text-align: center; } -p.CommandWindowText { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 9pt; border: 1px solid #A6A6A6; padding-top: 1pt; padding-bottom: 1pt; padding-left: 4pt; padding-right: 4pt; max-height:400pt; overflow: auto; white-space: pre; word-break: normal; } -h1.CoverPageTitle { font-size: 36pt; text-align: center; } -table.CoverPageTable { margin-top: 10pt; width: 100%; table-layout: fixed; } -table.CoverPageTable p { font-size: 14pt; } -table.CoverPageTable td { padding-left: 6pt; padding-right: 6pt; vertical-align: top; } -table.CoverPageTable td.CoverPageTableLabel { width: 47%; } -table.CoverPageTable td.CoverPageTableLabel p { text-align: right; } -table.CoverPageTable td.CoverPageTableValue { width: 53%; } -p.TopMargin { margin-top: 20pt; } -p.DiagnosticLabel { font-size: 10pt; letter-spacing:0.5pt; font-style: italic; } -p.EventsLabel { } -p.FailureSummaryText { margin-bottom: 8pt; } -table.FailureSummaryTable { width: 100%; } -table.FailureSummaryTable td { padding-left: 6pt; padding-right: 6pt; } -table.FailureSummaryTable a { color: black; text-decoration: none; } -table.FailureSummaryTable a:hover { color: #2E74B5; text-decoration: underline; } -table.FailureSummaryTable td.FailureSummaryTableIndentColumn { width: 0.2in; } -table.FailureSummaryTable td.TestNameColumn { border-bottom: 1px solid #D0CECE; } -table.FailureSummaryTable td.ReasonsColumn { border-bottom: 1px solid #D0CECE; width: 1.6in; } -table.FailureSummaryTable td.DetailsLinkColumn { text-align: right; width: 0.75in; } -table.FailureSummaryTable tr.FailureSummaryRow p { margin-top: 3pt; } -p.FilterSummaryText { margin-bottom: 8pt; } -table.FilterSummaryTable { width: 100%; } -table.FilterSummaryTable td { padding-left: 6pt; padding-right: 6pt; } -table.FilterSummaryTable a { color: black; text-decoration: none; } -table.FilterSummaryTable a:hover { color: #2E74B5; text-decoration: underline; } -table.FilterSummaryTable td.FilteredSummaryTableIndentColumn { width: 0.2in; } -table.FilterSummaryTable td.TestNameColumn { border-bottom: 1px solid #D0CECE; } -table.FilterSummaryTable td.DetailsLinkColumn { text-align: right; width: 0.7in; } -table.FilterSummaryTable tr.FilterSummaryRow p { margin-top: 3pt; } -h1.Heading1 { font-size: 18pt; letter-spacing: 1pt; border-bottom: 1px solid #ED7D31; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; margin-bottom: 6pt; padding-left: 4pt; } -h2.Heading2 { font-size: 12pt; letter-spacing: 2pt; font-weight: bold; color: white; background-color: #4471C4; border-left: 8pt solid #4471C4; border-top: 4pt solid #4471C4; border-right: 8pt solid #4471C4; border-bottom: 4pt solid #4471C4; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; } -h3.Heading3 { font-size: 12pt; letter-spacing: 2pt; background-color: #D9E2F3; border-left: 8pt solid #D9E2F3; border-top: 4pt solid #D9E2F3; border-right: 8pt solid #D9E2F3; border-bottom: 4pt solid #D9E2F3; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; } -h4.Heading4 { font-size: 11pt; letter-spacing: 1pt; color: #2F5496; border-left: 1px dashed #4471C4; border-top: 1px dashed #4471C4; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; margin-bottom: 10pt; padding-top: 2pt; padding-left: 6pt; } -h5.Heading5 { font-size: 11pt; font-weight: bold; margin-top: 8pt; margin-bottom: 8pt; } -div.NavigationPane { padding: 0pt 10pt 25pt 10pt; position: fixed; right: 10pt; top: 0pt; border-radius: 0pt 0pt 10pt 10pt; z-index: 9999; margin-top: -34pt; background: #F0F0F0; width: 50pt; height: 50%; max-height: 30pt; border-style: solid; border-width: 0px 1px 1px 1px; border-color: #BBBBBB; } -div.NavigationPane.open { transition: all 0.5s ease; margin-top: 0pt; height: 50%; max-height: 50%; width: auto; max-width: 50%; } -div.NavigationBox { width: 100%; height: 100%; overflow: auto; border-width: 0px 0px 1px 0px; border-style: solid; border-color: #DDDDDD; padding-right: 10px; } -div.NavigationBox ul { font-size: 9pt; padding-left: 10pt; } -div.NavigationBox ul p { white-space: pre; word-break: normal; } -div.NavigationBox ul a { color: black; text-decoration: none; } -div.NavigationBox ul a:hover { color: #2E74B5; } -div.ArrowBox { height: 25pt; } -div.ArrowBox p { text-align: center; font-size: 18pt; color: #BBBBBB; } -div.ArrowBox:hover { cursor: pointer; } -div.ArrowBox:hover p { color: #2E74B5; } -::-webkit-scrollbar-corner { background: #F0F0F0; } -p.LeftArtifactImageParagraph { margin-top: 2pt; margin-bottom: 2pt; margin-left: 10pt; } -p.LeftArtifactImageParagraph img:hover { cursor: pointer; } -p.SingleCenteredHolePart { text-align: center; } -p.StackTextParagraph { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 7pt; margin-left: 5pt; padding: 2pt 5pt 2pt 5pt; max-height: 100pt; max-width: 100%; display: inline-block; overflow: auto; } -p.TestDetails { margin-bottom: 8pt; } -p.OverviewLinkParagraph { font-size: 8pt; text-align: right; } -table.TestParentBox { margin-top: 3pt; margin-bottom: 6pt; width: 100%; } -table.TestParentBox td.IndentCell { width:0.2in; } -table.TestParentBox td.TestParentNameCell { border-left:1px solid #E6E6E6; border-top: 1px solid #E6E6E6; margin-left: 3pt; margin-top: 1pt; } -table.TestParentBox td.TestParentNameCell p { text-decoration: underline; font-size: 10pt; } -table.TestParentBox td.TestParentNameCell a { color: black; } -table.TestParentBox td.TestParentNameCell a:hover { color: #2E74B5; } -table.TestParentBox td.TotalDurationTextCell { width: 1.2in; text-align: right; border-right:1px solid #E6E6E6; border-top: 1px solid #E6E6E6; margin-top: 1pt; margin-right: 3pt; } -table.TestParentBox td.TotalDurationTextCell p { font-size: 10pt; } -table.TestParentBox td.ResultsIconsCell { border-left: 1px solid #E6E6E6; border-right: 1px solid #E6E6E6; border-bottom: 1px solid #E6E6E6; margin-left: 3pt; margin-right: 3pt; margin-bottom: 1pt; } -table.TestParentBox td.ResultsIconsCell p { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 2pt; line-height: 4pt; } -table.TestParentBox td.ResultsIconsCell img:hover { transform: scale(1.75); transition: transform 0.2s ease; } -ul.EventSummaryText { margin: 0pt 0pt 0pt 20pt; list-style-type: circle; padding: 0pt; } -table.EventTable { width: 100%; margin-bottom: 6pt; table-layout: fixed; } -table.EventTable td.IndentCell { width: 20pt; } -table.EventTable td.ContentCell { border-left: 1px solid #D9E2F3; padding-left: 0.08in; padding-right: 0.08in; } -span.InlineLabel { font-size: 10pt; letter-spacing:0.5pt; font-style: italic; } -span.InlineText { font-size: 9pt; } -p.CodeParagraph { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 8pt; margin-left: 5pt; padding: 2pt 5pt 2pt 5pt;; max-height: 200pt; max-width: 100%; overflow: auto; background-color: #F2F2F2; display: inline-block; white-space: pre; word-break: normal; } -p.BoldText { font-weight: bold; } -span.InternalLink { color: #2E74B5; text-decoration: underline; font-style: italic; } -span.InternalLink:hover { font-weight: bold; } -p.TenPoint { font-size: 10pt; } -p.EightPoint { font-size: 8pt; } -p.BaseFolder { text-decoration: underline; } -p.BaseFolder a { color: black; } -p.BaseFolder a:hover { color: #2E74B5; } -p.SpaceAfterTestParentOverviewParts { font-size: 1pt; margin-bottom:6pt; } -p.PieChartContainer { margin-top: 2pt; margin-bottom: 2pt; text-align: center; } -p.CommandWindowText { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 9pt; border: 1px solid #A6A6A6; padding-top: 1pt; padding-bottom: 1pt; padding-left: 4pt; padding-right: 4pt; max-height:400pt; overflow: auto; white-space: pre; word-break: normal; } -h1.CoverPageTitle { font-size: 36pt; text-align: center; } -table.CoverPageTable { margin-top: 10pt; width: 100%; table-layout: fixed; } -table.CoverPageTable p { font-size: 14pt; } -table.CoverPageTable td { padding-left: 6pt; padding-right: 6pt; vertical-align: top; } -table.CoverPageTable td.CoverPageTableLabel { width: 47%; } -table.CoverPageTable td.CoverPageTableLabel p { text-align: right; } -table.CoverPageTable td.CoverPageTableValue { width: 53%; } -p.TopMargin { margin-top: 20pt; } -p.DiagnosticLabel { font-size: 10pt; letter-spacing:0.5pt; font-style: italic; } -p.EventsLabel { } -p.FailureSummaryText { margin-bottom: 8pt; } -table.FailureSummaryTable { width: 100%; } -table.FailureSummaryTable td { padding-left: 6pt; padding-right: 6pt; } -table.FailureSummaryTable a { color: black; text-decoration: none; } -table.FailureSummaryTable a:hover { color: #2E74B5; text-decoration: underline; } -table.FailureSummaryTable td.FailureSummaryTableIndentColumn { width: 0.2in; } -table.FailureSummaryTable td.TestNameColumn { border-bottom: 1px solid #D0CECE; } -table.FailureSummaryTable td.ReasonsColumn { border-bottom: 1px solid #D0CECE; width: 1.6in; } -table.FailureSummaryTable td.DetailsLinkColumn { text-align: right; width: 0.75in; } -table.FailureSummaryTable tr.FailureSummaryRow p { margin-top: 3pt; } -p.FilterSummaryText { margin-bottom: 8pt; } -table.FilterSummaryTable { width: 100%; } -table.FilterSummaryTable td { padding-left: 6pt; padding-right: 6pt; } -table.FilterSummaryTable a { color: black; text-decoration: none; } -table.FilterSummaryTable a:hover { color: #2E74B5; text-decoration: underline; } -table.FilterSummaryTable td.FilteredSummaryTableIndentColumn { width: 0.2in; } -table.FilterSummaryTable td.TestNameColumn { border-bottom: 1px solid #D0CECE; } -table.FilterSummaryTable td.DetailsLinkColumn { text-align: right; width: 0.7in; } -table.FilterSummaryTable tr.FilterSummaryRow p { margin-top: 3pt; } -h1.Heading1 { font-size: 18pt; letter-spacing: 1pt; border-bottom: 1px solid #ED7D31; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; margin-bottom: 6pt; padding-left: 4pt; } -h2.Heading2 { font-size: 12pt; letter-spacing: 2pt; font-weight: bold; color: white; background-color: #4471C4; border-left: 8pt solid #4471C4; border-top: 4pt solid #4471C4; border-right: 8pt solid #4471C4; border-bottom: 4pt solid #4471C4; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; } -h3.Heading3 { font-size: 12pt; letter-spacing: 2pt; background-color: #D9E2F3; border-left: 8pt solid #D9E2F3; border-top: 4pt solid #D9E2F3; border-right: 8pt solid #D9E2F3; border-bottom: 4pt solid #D9E2F3; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; } -h4.Heading4 { font-size: 11pt; letter-spacing: 1pt; color: #2F5496; border-left: 1px dashed #4471C4; border-top: 1px dashed #4471C4; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; margin-bottom: 10pt; padding-top: 2pt; padding-left: 6pt; } -h5.Heading5 { font-size: 11pt; font-weight: bold; margin-top: 8pt; margin-bottom: 8pt; } -div.NavigationPane { padding: 0pt 10pt 25pt 10pt; position: fixed; right: 10pt; top: 0pt; border-radius: 0pt 0pt 10pt 10pt; z-index: 9999; margin-top: -34pt; background: #F0F0F0; width: 50pt; height: 50%; max-height: 30pt; border-style: solid; border-width: 0px 1px 1px 1px; border-color: #BBBBBB; } -div.NavigationPane.open { transition: all 0.5s ease; margin-top: 0pt; height: 50%; max-height: 50%; width: auto; max-width: 50%; } -div.NavigationBox { width: 100%; height: 100%; overflow: auto; border-width: 0px 0px 1px 0px; border-style: solid; border-color: #DDDDDD; padding-right: 10px; } -div.NavigationBox ul { font-size: 9pt; padding-left: 10pt; } -div.NavigationBox ul p { white-space: pre; word-break: normal; } -div.NavigationBox ul a { color: black; text-decoration: none; } -div.NavigationBox ul a:hover { color: #2E74B5; } -div.ArrowBox { height: 25pt; } -div.ArrowBox p { text-align: center; font-size: 18pt; color: #BBBBBB; } -div.ArrowBox:hover { cursor: pointer; } -div.ArrowBox:hover p { color: #2E74B5; } -::-webkit-scrollbar-corner { background: #F0F0F0; } -p.LeftArtifactImageParagraph { margin-top: 2pt; margin-bottom: 2pt; margin-left: 10pt; } -p.LeftArtifactImageParagraph img:hover { cursor: pointer; } -p.SingleCenteredHolePart { text-align: center; } -p.StackTextParagraph { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 7pt; margin-left: 5pt; padding: 2pt 5pt 2pt 5pt; max-height: 100pt; max-width: 100%; display: inline-block; overflow: auto; } -p.TestDetails { margin-bottom: 8pt; } -p.OverviewLinkParagraph { font-size: 8pt; text-align: right; } -table.TestParentBox { margin-top: 3pt; margin-bottom: 6pt; width: 100%; } -table.TestParentBox td.IndentCell { width:0.2in; } -table.TestParentBox td.TestParentNameCell { border-left:1px solid #E6E6E6; border-top: 1px solid #E6E6E6; margin-left: 3pt; margin-top: 1pt; } -table.TestParentBox td.TestParentNameCell p { text-decoration: underline; font-size: 10pt; } -table.TestParentBox td.TestParentNameCell a { color: black; } -table.TestParentBox td.TestParentNameCell a:hover { color: #2E74B5; } -table.TestParentBox td.TotalDurationTextCell { width: 1.2in; text-align: right; border-right:1px solid #E6E6E6; border-top: 1px solid #E6E6E6; margin-top: 1pt; margin-right: 3pt; } -table.TestParentBox td.TotalDurationTextCell p { font-size: 10pt; } -table.TestParentBox td.ResultsIconsCell { border-left: 1px solid #E6E6E6; border-right: 1px solid #E6E6E6; border-bottom: 1px solid #E6E6E6; margin-left: 3pt; margin-right: 3pt; margin-bottom: 1pt; } -table.TestParentBox td.ResultsIconsCell p { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 2pt; line-height: 4pt; } -table.TestParentBox td.ResultsIconsCell img:hover { transform: scale(1.75); transition: transform 0.2s ease; } -ul.EventSummaryText { margin: 0pt 0pt 0pt 20pt; list-style-type: circle; padding: 0pt; } -table.EventTable { width: 100%; margin-bottom: 6pt; table-layout: fixed; } -table.EventTable td.IndentCell { width: 20pt; } -table.EventTable td.ContentCell { border-left: 1px solid #D9E2F3; padding-left: 0.08in; padding-right: 0.08in; } -span.InlineLabel { font-size: 10pt; letter-spacing:0.5pt; font-style: italic; } -span.InlineText { font-size: 9pt; } -p.CodeParagraph { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 8pt; margin-left: 5pt; padding: 2pt 5pt 2pt 5pt;; max-height: 200pt; max-width: 100%; overflow: auto; background-color: #F2F2F2; display: inline-block; white-space: pre; word-break: normal; } -p.BoldText { font-weight: bold; } -span.InternalLink { color: #2E74B5; text-decoration: underline; font-style: italic; } -span.InternalLink:hover { font-weight: bold; } -p.TenPoint { font-size: 10pt; } -p.EightPoint { font-size: 8pt; } -p.BaseFolder { text-decoration: underline; } -p.BaseFolder a { color: black; } -p.BaseFolder a:hover { color: #2E74B5; } -p.SpaceAfterTestParentOverviewParts { font-size: 1pt; margin-bottom:6pt; } -p.PieChartContainer { margin-top: 2pt; margin-bottom: 2pt; text-align: center; } -p.CommandWindowText { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 9pt; border: 1px solid #A6A6A6; padding-top: 1pt; padding-bottom: 1pt; padding-left: 4pt; padding-right: 4pt; max-height:400pt; overflow: auto; white-space: pre; word-break: normal; } -h1.CoverPageTitle { font-size: 36pt; text-align: center; } -table.CoverPageTable { margin-top: 10pt; width: 100%; table-layout: fixed; } -table.CoverPageTable p { font-size: 14pt; } -table.CoverPageTable td { padding-left: 6pt; padding-right: 6pt; vertical-align: top; } -table.CoverPageTable td.CoverPageTableLabel { width: 47%; } -table.CoverPageTable td.CoverPageTableLabel p { text-align: right; } -table.CoverPageTable td.CoverPageTableValue { width: 53%; } -p.TopMargin { margin-top: 20pt; } -p.DiagnosticLabel { font-size: 10pt; letter-spacing:0.5pt; font-style: italic; } -p.EventsLabel { } -p.FailureSummaryText { margin-bottom: 8pt; } -table.FailureSummaryTable { width: 100%; } -table.FailureSummaryTable td { padding-left: 6pt; padding-right: 6pt; } -table.FailureSummaryTable a { color: black; text-decoration: none; } -table.FailureSummaryTable a:hover { color: #2E74B5; text-decoration: underline; } -table.FailureSummaryTable td.FailureSummaryTableIndentColumn { width: 0.2in; } -table.FailureSummaryTable td.TestNameColumn { border-bottom: 1px solid #D0CECE; } -table.FailureSummaryTable td.ReasonsColumn { border-bottom: 1px solid #D0CECE; width: 1.6in; } -table.FailureSummaryTable td.DetailsLinkColumn { text-align: right; width: 0.75in; } -table.FailureSummaryTable tr.FailureSummaryRow p { margin-top: 3pt; } -p.FilterSummaryText { margin-bottom: 8pt; } -table.FilterSummaryTable { width: 100%; } -table.FilterSummaryTable td { padding-left: 6pt; padding-right: 6pt; } -table.FilterSummaryTable a { color: black; text-decoration: none; } -table.FilterSummaryTable a:hover { color: #2E74B5; text-decoration: underline; } -table.FilterSummaryTable td.FilteredSummaryTableIndentColumn { width: 0.2in; } -table.FilterSummaryTable td.TestNameColumn { border-bottom: 1px solid #D0CECE; } -table.FilterSummaryTable td.DetailsLinkColumn { text-align: right; width: 0.7in; } -table.FilterSummaryTable tr.FilterSummaryRow p { margin-top: 3pt; } -h1.Heading1 { font-size: 18pt; letter-spacing: 1pt; border-bottom: 1px solid #ED7D31; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; margin-bottom: 6pt; padding-left: 4pt; } -h2.Heading2 { font-size: 12pt; letter-spacing: 2pt; font-weight: bold; color: white; background-color: #4471C4; border-left: 8pt solid #4471C4; border-top: 4pt solid #4471C4; border-right: 8pt solid #4471C4; border-bottom: 4pt solid #4471C4; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; } -h3.Heading3 { font-size: 12pt; letter-spacing: 2pt; background-color: #D9E2F3; border-left: 8pt solid #D9E2F3; border-top: 4pt solid #D9E2F3; border-right: 8pt solid #D9E2F3; border-bottom: 4pt solid #D9E2F3; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; } -h4.Heading4 { font-size: 11pt; letter-spacing: 1pt; color: #2F5496; border-left: 1px dashed #4471C4; border-top: 1px dashed #4471C4; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; margin-bottom: 10pt; padding-top: 2pt; padding-left: 6pt; } -h5.Heading5 { font-size: 11pt; font-weight: bold; margin-top: 8pt; margin-bottom: 8pt; } -div.NavigationPane { padding: 0pt 10pt 25pt 10pt; position: fixed; right: 10pt; top: 0pt; border-radius: 0pt 0pt 10pt 10pt; z-index: 9999; margin-top: -34pt; background: #F0F0F0; width: 50pt; height: 50%; max-height: 30pt; border-style: solid; border-width: 0px 1px 1px 1px; border-color: #BBBBBB; } -div.NavigationPane.open { transition: all 0.5s ease; margin-top: 0pt; height: 50%; max-height: 50%; width: auto; max-width: 50%; } -div.NavigationBox { width: 100%; height: 100%; overflow: auto; border-width: 0px 0px 1px 0px; border-style: solid; border-color: #DDDDDD; padding-right: 10px; } -div.NavigationBox ul { font-size: 9pt; padding-left: 10pt; } -div.NavigationBox ul p { white-space: pre; word-break: normal; } -div.NavigationBox ul a { color: black; text-decoration: none; } -div.NavigationBox ul a:hover { color: #2E74B5; } -div.ArrowBox { height: 25pt; } -div.ArrowBox p { text-align: center; font-size: 18pt; color: #BBBBBB; } -div.ArrowBox:hover { cursor: pointer; } -div.ArrowBox:hover p { color: #2E74B5; } -::-webkit-scrollbar-corner { background: #F0F0F0; } -p.LeftArtifactImageParagraph { margin-top: 2pt; margin-bottom: 2pt; margin-left: 10pt; } -p.LeftArtifactImageParagraph img:hover { cursor: pointer; } -p.SingleCenteredHolePart { text-align: center; } -p.StackTextParagraph { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 7pt; margin-left: 5pt; padding: 2pt 5pt 2pt 5pt; max-height: 100pt; max-width: 100%; display: inline-block; overflow: auto; } -p.TestDetails { margin-bottom: 8pt; } -p.OverviewLinkParagraph { font-size: 8pt; text-align: right; } -table.TestParentBox { margin-top: 3pt; margin-bottom: 6pt; width: 100%; } -table.TestParentBox td.IndentCell { width:0.2in; } -table.TestParentBox td.TestParentNameCell { border-left:1px solid #E6E6E6; border-top: 1px solid #E6E6E6; margin-left: 3pt; margin-top: 1pt; } -table.TestParentBox td.TestParentNameCell p { text-decoration: underline; font-size: 10pt; } -table.TestParentBox td.TestParentNameCell a { color: black; } -table.TestParentBox td.TestParentNameCell a:hover { color: #2E74B5; } -table.TestParentBox td.TotalDurationTextCell { width: 1.2in; text-align: right; border-right:1px solid #E6E6E6; border-top: 1px solid #E6E6E6; margin-top: 1pt; margin-right: 3pt; } -table.TestParentBox td.TotalDurationTextCell p { font-size: 10pt; } -table.TestParentBox td.ResultsIconsCell { border-left: 1px solid #E6E6E6; border-right: 1px solid #E6E6E6; border-bottom: 1px solid #E6E6E6; margin-left: 3pt; margin-right: 3pt; margin-bottom: 1pt; } -table.TestParentBox td.ResultsIconsCell p { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 2pt; line-height: 4pt; } -table.TestParentBox td.ResultsIconsCell img:hover { transform: scale(1.75); transition: transform 0.2s ease; } diff --git a/report/R2022b/stylesheets/root.css b/report/R2022b/stylesheets/root.css deleted file mode 100644 index 8bdb6f6..0000000 --- a/report/R2022b/stylesheets/root.css +++ /dev/null @@ -1,19 +0,0 @@ -p { - font-family: 'Calibri Light', Calibri, Segoe, Optima, Arial, 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, rg-body; - font-size: 11pt; - white-space: pre-wrap; - word-break: break-word; - margin: 0px; -} -div.PageContainer { - padding:20pt; - margin: auto; - min-width:7.5in; -} -h1, h2, h3, h4, h5, h6 { - font-family: 'Calibri Light', Calibri, Segoe, Optima, Arial, 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, rg-title; - font-weight: normal; - white-space: pre; - word-break: break-word; - margin: 0px; -} \ No newline at end of file diff --git a/report/R2022b/test-results.xml b/report/R2022b/test-results.xml deleted file mode 100644 index 4eb7af3..0000000 --- a/report/R2022b/test-results.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/report/R2022b/testreport.html b/report/R2022b/testreport.html deleted file mode 100644 index da08eaa..0000000 --- a/report/R2022b/testreport.html +++ /dev/null @@ -1,380 +0,0 @@ - - - - - - - - - - -
- - -

- -

MATLABĀ® Test Report

- - - - - - - - - - - - - - - - - -
-

Timestamp:

-
-

19-Apr-2023 17:59:17

-
-

Host:

-
-

MATHWORKS-Zz8wx

-
-

Platform:

-
-

win64

-
-

MATLAB Version:

-
-

9.13.0.2126072 (R2022b) Update 3

-
- - - - - - - - - -
-

Number of Tests:

-
-

17

-
-

Testing Time:

-
-

392.6902 seconds

-
- - - - - -
-

Overall Result:

-
-

PASSED

-
- -

- - - - -

Overview

- -

C:\Users\esmithzb\OneDrive - MathWorks\Scripts\Curriculum Modules\Mathematics\Calculus-Integrals\tests\

- - - - - - - - - - - -
-

-
-

smokeTests

-
-

392.6902 seconds

-
-

-
-

-
- -

- - - - -

Details

- - -

C:\Users\esmithzb\OneDrive - MathWorks\Scripts\Curriculum Modules\Mathematics\Calculus-Integrals\tests\

- - -

smokeTests

- - -

testMLX

- -

The test passed. -Duration: 47.2580 seconds

- -

(Overview)

- - - - -

testMAT

- -

The test passed. -Duration: 0.5149 seconds

- -

(Overview)

- - - - -

testSLX

- -

The test passed. -Duration: 0.1913 seconds

- -

(Overview)

- - - - -

runintegralAntiderivatives

- -

The test passed. -Duration: 45.2977 seconds

- -

(Overview)

- - - - -

runintegralByParts

- -

The test passed. -Duration: 42.4350 seconds

- -

(Overview)

- - - - -

runintegralFundamentalTheorem

- -

The test passed. -Duration: 19.5307 seconds

- -

(Overview)

- - - - -

runintegralRiemann

- -

The test passed. -Duration: 59.3636 seconds

- -

(Overview)

- - - - -

runintegralSubstitution

- -

The test passed. -Duration: 20.7377 seconds

- -

(Overview)

- - - - -

runpracticeAntiderivatives

- -

The test passed. -Duration: 1.1947 seconds

- -

(Overview)

- - - - -

runpracticeByParts

- -

The test passed. -Duration: 7.3706 seconds

- -

(Overview)

- - - - -

runpracticeFundamentalTheorem

- -

The test passed. -Duration: 0.8680 seconds

- -

(Overview)

- - - - -

runpracticeSubstitution

- -

The test passed. -Duration: 2.0401 seconds

- -

(Overview)

- - - - -

runvizAntiderivatives

- -

The test passed. -Duration: 5.0089 seconds

- -

(Overview)

- - - - -

runvizByParts

- -

The test passed. -Duration: 3.2159 seconds

- -

(Overview)

- - - - -

runvizFundamentalTheorem

- -

The test passed. -Duration: 2.9499 seconds

- -

(Overview)

- - - - -

runvizRiemann

- -

The test passed. -Duration: 120.3221 seconds

- -

(Overview)

- - - - -

runvizSubstitution

- -

The test passed. -Duration: 14.3911 seconds

- -

(Overview)

- - - - - - - - - - -
- - \ No newline at end of file diff --git a/report/R2023a/[Content_Types].xml b/report/R2023a/[Content_Types].xml deleted file mode 100644 index 44d21b8..0000000 --- a/report/R2023a/[Content_Types].xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/report/R2023a/_rels/.rels b/report/R2023a/_rels/.rels deleted file mode 100644 index d7b3f5b..0000000 --- a/report/R2023a/_rels/.rels +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/report/R2023a/_rels/index.html.rels b/report/R2023a/_rels/index.html.rels deleted file mode 100644 index a42d8c9..0000000 --- a/report/R2023a/_rels/index.html.rels +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/report/R2023a/images/image1.png b/report/R2023a/images/image1.png deleted file mode 100644 index 0e0a3f3..0000000 Binary files a/report/R2023a/images/image1.png and /dev/null differ diff --git a/report/R2023a/images/image2.svg b/report/R2023a/images/image2.svg deleted file mode 100644 index f4f4de0..0000000 --- a/report/R2023a/images/image2.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - diff --git a/report/R2023a/stylesheets/combined.css b/report/R2023a/stylesheets/combined.css deleted file mode 100644 index 5a3c88b..0000000 --- a/report/R2023a/stylesheets/combined.css +++ /dev/null @@ -1,405 +0,0 @@ -ul.EventSummaryText { margin: 0pt 0pt 0pt 20pt; list-style-type: circle; padding: 0pt; } -table.EventTable { width: 100%; margin-bottom: 6pt; table-layout: fixed; } -table.EventTable td.IndentCell { width: 20pt; } -table.EventTable td.ContentCell { border-left: 1px solid #D9E2F3; padding-left: 0.08in; padding-right: 0.08in; } -span.InlineLabel { font-size: 10pt; letter-spacing:0.5pt; font-style: italic; } -span.InlineText { font-size: 9pt; } -p.CodeParagraph { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 8pt; margin-left: 5pt; padding: 2pt 5pt 2pt 5pt;; max-height: 200pt; max-width: 100%; overflow: auto; background-color: #F2F2F2; display: inline-block; white-space: pre; word-break: normal; } -p.BoldText { font-weight: bold; } -span.InternalLink { color: #2E74B5; text-decoration: underline; font-style: italic; } -span.InternalLink:hover { font-weight: bold; } -p.TenPoint { font-size: 10pt; } -p.EightPoint { font-size: 8pt; } -p.BaseFolder { text-decoration: underline; } -p.BaseFolder a { color: black; } -p.BaseFolder a:hover { color: #2E74B5; } -p.SpaceAfterTestParentOverviewParts { font-size: 1pt; margin-bottom:6pt; } -p.PieChartContainer { margin-top: 2pt; margin-bottom: 2pt; text-align: center; } -p.CommandWindowText { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 9pt; border: 1px solid #A6A6A6; padding-top: 1pt; padding-bottom: 1pt; padding-left: 4pt; padding-right: 4pt; max-height:400pt; overflow: auto; white-space: pre; word-break: normal; } -h1.CoverPageTitle { font-size: 36pt; text-align: center; } -table.CoverPageTable { margin-top: 10pt; width: 100%; table-layout: fixed; } -table.CoverPageTable p { font-size: 14pt; } -table.CoverPageTable td { padding-left: 6pt; padding-right: 6pt; vertical-align: top; } -table.CoverPageTable td.CoverPageTableLabel { width: 47%; } -table.CoverPageTable td.CoverPageTableLabel p { text-align: right; } -table.CoverPageTable td.CoverPageTableValue { width: 53%; } -p.TopMargin { margin-top: 20pt; } -p.DiagnosticLabel { font-size: 10pt; letter-spacing:0.5pt; font-style: italic; } -p.EventsLabel { } -p.FailureSummaryText { margin-bottom: 8pt; } -table.FailureSummaryTable { width: 100%; } -table.FailureSummaryTable td { padding-left: 6pt; padding-right: 6pt; } -table.FailureSummaryTable a { color: black; text-decoration: none; } -table.FailureSummaryTable a:hover { color: #2E74B5; text-decoration: underline; } -table.FailureSummaryTable td.FailureSummaryTableIndentColumn { width: 0.2in; } -table.FailureSummaryTable td.TestNameColumn { border-bottom: 1px solid #D0CECE; } -table.FailureSummaryTable td.ReasonsColumn { border-bottom: 1px solid #D0CECE; width: 1.6in; } -table.FailureSummaryTable td.DetailsLinkColumn { text-align: right; width: 0.75in; } -table.FailureSummaryTable tr.FailureSummaryRow p { margin-top: 3pt; } -p.FilterSummaryText { margin-bottom: 8pt; } -table.FilterSummaryTable { width: 100%; } -table.FilterSummaryTable td { padding-left: 6pt; padding-right: 6pt; } -table.FilterSummaryTable a { color: black; text-decoration: none; } -table.FilterSummaryTable a:hover { color: #2E74B5; text-decoration: underline; } -table.FilterSummaryTable td.FilteredSummaryTableIndentColumn { width: 0.2in; } -table.FilterSummaryTable td.TestNameColumn { border-bottom: 1px solid #D0CECE; } -table.FilterSummaryTable td.DetailsLinkColumn { text-align: right; width: 0.7in; } -table.FilterSummaryTable tr.FilterSummaryRow p { margin-top: 3pt; } -h1.Heading1 { font-size: 18pt; letter-spacing: 1pt; border-bottom: 1px solid #ED7D31; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; margin-bottom: 6pt; padding-left: 4pt; } -h2.Heading2 { font-size: 12pt; letter-spacing: 2pt; font-weight: bold; color: white; background-color: #4471C4; border-left: 8pt solid #4471C4; border-top: 4pt solid #4471C4; border-right: 8pt solid #4471C4; border-bottom: 4pt solid #4471C4; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; } -h3.Heading3 { font-size: 12pt; letter-spacing: 2pt; background-color: #D9E2F3; border-left: 8pt solid #D9E2F3; border-top: 4pt solid #D9E2F3; border-right: 8pt solid #D9E2F3; border-bottom: 4pt solid #D9E2F3; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; } -h4.Heading4 { font-size: 11pt; letter-spacing: 1pt; color: #2F5496; border-left: 1px dashed #4471C4; border-top: 1px dashed #4471C4; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; margin-bottom: 10pt; padding-top: 2pt; padding-left: 6pt; } -h5.Heading5 { font-size: 11pt; font-weight: bold; margin-top: 8pt; margin-bottom: 8pt; } -div.NavigationPane { padding: 0pt 10pt 25pt 10pt; position: fixed; right: 10pt; top: 0pt; border-radius: 0pt 0pt 10pt 10pt; z-index: 9999; margin-top: -34pt; background: #F0F0F0; width: 50pt; height: 50%; max-height: 30pt; border-style: solid; border-width: 0px 1px 1px 1px; border-color: #BBBBBB; } -div.NavigationPane.open { transition: all 0.5s ease; margin-top: 0pt; height: 50%; max-height: 50%; width: auto; max-width: 50%; } -div.NavigationBox { width: 100%; height: 100%; overflow: auto; border-width: 0px 0px 1px 0px; border-style: solid; border-color: #DDDDDD; padding-right: 10px; } -div.NavigationBox ul { font-size: 9pt; padding-left: 10pt; } -div.NavigationBox ul p { white-space: pre; word-break: normal; } -div.NavigationBox ul a { color: black; text-decoration: none; } -div.NavigationBox ul a:hover { color: #2E74B5; } -div.ArrowBox { height: 25pt; } -div.ArrowBox p { text-align: center; font-size: 18pt; color: #BBBBBB; } -div.ArrowBox:hover { cursor: pointer; } -div.ArrowBox:hover p { color: #2E74B5; } -::-webkit-scrollbar-corner { background: #F0F0F0; } -p.LeftArtifactImageParagraph { margin-top: 2pt; margin-bottom: 2pt; margin-left: 10pt; } -p.LeftArtifactImageParagraph img:hover { cursor: pointer; } -p.SingleCenteredHolePart { text-align: center; } -p.StackTextParagraph { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 7pt; margin-left: 5pt; padding: 2pt 5pt 2pt 5pt; max-height: 100pt; max-width: 100%; display: inline-block; overflow: auto; } -p.TestDetails { margin-bottom: 8pt; } -p.OverviewLinkParagraph { font-size: 8pt; text-align: right; } -table.TestParentBox { margin-top: 3pt; margin-bottom: 6pt; width: 100%; } -table.TestParentBox td.IndentCell { width:0.2in; } -table.TestParentBox td.TestParentNameCell { border-left:1px solid #E6E6E6; border-top: 1px solid #E6E6E6; margin-left: 3pt; margin-top: 1pt; } -table.TestParentBox td.TestParentNameCell p { text-decoration: underline; font-size: 10pt; } -table.TestParentBox td.TestParentNameCell a { color: black; } -table.TestParentBox td.TestParentNameCell a:hover { color: #2E74B5; } -table.TestParentBox td.TotalDurationTextCell { width: 1.2in; text-align: right; border-right:1px solid #E6E6E6; border-top: 1px solid #E6E6E6; margin-top: 1pt; margin-right: 3pt; } -table.TestParentBox td.TotalDurationTextCell p { font-size: 10pt; } -table.TestParentBox td.ResultsIconsCell { border-left: 1px solid #E6E6E6; border-right: 1px solid #E6E6E6; border-bottom: 1px solid #E6E6E6; margin-left: 3pt; margin-right: 3pt; margin-bottom: 1pt; } -table.TestParentBox td.ResultsIconsCell p { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 2pt; line-height: 4pt; } -table.TestParentBox td.ResultsIconsCell img:hover { transform: scale(1.75); transition: transform 0.2s ease; } -ul.EventSummaryText { margin: 0pt 0pt 0pt 20pt; list-style-type: circle; padding: 0pt; } -table.EventTable { width: 100%; margin-bottom: 6pt; table-layout: fixed; } -table.EventTable td.IndentCell { width: 20pt; } -table.EventTable td.ContentCell { border-left: 1px solid #D9E2F3; padding-left: 0.08in; padding-right: 0.08in; } -span.InlineLabel { font-size: 10pt; letter-spacing:0.5pt; font-style: italic; } -span.InlineText { font-size: 9pt; } -p.CodeParagraph { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 8pt; margin-left: 5pt; padding: 2pt 5pt 2pt 5pt;; max-height: 200pt; max-width: 100%; overflow: auto; background-color: #F2F2F2; display: inline-block; white-space: pre; word-break: normal; } -p.BoldText { font-weight: bold; } -span.InternalLink { color: #2E74B5; text-decoration: underline; font-style: italic; } -span.InternalLink:hover { font-weight: bold; } -p.TenPoint { font-size: 10pt; } -p.EightPoint { font-size: 8pt; } -p.BaseFolder { text-decoration: underline; } -p.BaseFolder a { color: black; } -p.BaseFolder a:hover { color: #2E74B5; } -p.SpaceAfterTestParentOverviewParts { font-size: 1pt; margin-bottom:6pt; } -p.PieChartContainer { margin-top: 2pt; margin-bottom: 2pt; text-align: center; } -p.CommandWindowText { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 9pt; border: 1px solid #A6A6A6; padding-top: 1pt; padding-bottom: 1pt; padding-left: 4pt; padding-right: 4pt; max-height:400pt; overflow: auto; white-space: pre; word-break: normal; } -h1.CoverPageTitle { font-size: 36pt; text-align: center; } -table.CoverPageTable { margin-top: 10pt; width: 100%; table-layout: fixed; } -table.CoverPageTable p { font-size: 14pt; } -table.CoverPageTable td { padding-left: 6pt; padding-right: 6pt; vertical-align: top; } -table.CoverPageTable td.CoverPageTableLabel { width: 47%; } -table.CoverPageTable td.CoverPageTableLabel p { text-align: right; } -table.CoverPageTable td.CoverPageTableValue { width: 53%; } -p.TopMargin { margin-top: 20pt; } -p.DiagnosticLabel { font-size: 10pt; letter-spacing:0.5pt; font-style: italic; } -p.EventsLabel { } -p.FailureSummaryText { margin-bottom: 8pt; } -table.FailureSummaryTable { width: 100%; } -table.FailureSummaryTable td { padding-left: 6pt; padding-right: 6pt; } -table.FailureSummaryTable a { color: black; text-decoration: none; } -table.FailureSummaryTable a:hover { color: #2E74B5; text-decoration: underline; } -table.FailureSummaryTable td.FailureSummaryTableIndentColumn { width: 0.2in; } -table.FailureSummaryTable td.TestNameColumn { border-bottom: 1px solid #D0CECE; } -table.FailureSummaryTable td.ReasonsColumn { border-bottom: 1px solid #D0CECE; width: 1.6in; } -table.FailureSummaryTable td.DetailsLinkColumn { text-align: right; width: 0.75in; } -table.FailureSummaryTable tr.FailureSummaryRow p { margin-top: 3pt; } -p.FilterSummaryText { margin-bottom: 8pt; } -table.FilterSummaryTable { width: 100%; } -table.FilterSummaryTable td { padding-left: 6pt; padding-right: 6pt; } -table.FilterSummaryTable a { color: black; text-decoration: none; } -table.FilterSummaryTable a:hover { color: #2E74B5; text-decoration: underline; } -table.FilterSummaryTable td.FilteredSummaryTableIndentColumn { width: 0.2in; } -table.FilterSummaryTable td.TestNameColumn { border-bottom: 1px solid #D0CECE; } -table.FilterSummaryTable td.DetailsLinkColumn { text-align: right; width: 0.7in; } -table.FilterSummaryTable tr.FilterSummaryRow p { margin-top: 3pt; } -h1.Heading1 { font-size: 18pt; letter-spacing: 1pt; border-bottom: 1px solid #ED7D31; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; margin-bottom: 6pt; padding-left: 4pt; } -h2.Heading2 { font-size: 12pt; letter-spacing: 2pt; font-weight: bold; color: white; background-color: #4471C4; border-left: 8pt solid #4471C4; border-top: 4pt solid #4471C4; border-right: 8pt solid #4471C4; border-bottom: 4pt solid #4471C4; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; } -h3.Heading3 { font-size: 12pt; letter-spacing: 2pt; background-color: #D9E2F3; border-left: 8pt solid #D9E2F3; border-top: 4pt solid #D9E2F3; border-right: 8pt solid #D9E2F3; border-bottom: 4pt solid #D9E2F3; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; } -h4.Heading4 { font-size: 11pt; letter-spacing: 1pt; color: #2F5496; border-left: 1px dashed #4471C4; border-top: 1px dashed #4471C4; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; margin-bottom: 10pt; padding-top: 2pt; padding-left: 6pt; } -h5.Heading5 { font-size: 11pt; font-weight: bold; margin-top: 8pt; margin-bottom: 8pt; } -div.NavigationPane { padding: 0pt 10pt 25pt 10pt; position: fixed; right: 10pt; top: 0pt; border-radius: 0pt 0pt 10pt 10pt; z-index: 9999; margin-top: -34pt; background: #F0F0F0; width: 50pt; height: 50%; max-height: 30pt; border-style: solid; border-width: 0px 1px 1px 1px; border-color: #BBBBBB; } -div.NavigationPane.open { transition: all 0.5s ease; margin-top: 0pt; height: 50%; max-height: 50%; width: auto; max-width: 50%; } -div.NavigationBox { width: 100%; height: 100%; overflow: auto; border-width: 0px 0px 1px 0px; border-style: solid; border-color: #DDDDDD; padding-right: 10px; } -div.NavigationBox ul { font-size: 9pt; padding-left: 10pt; } -div.NavigationBox ul p { white-space: pre; word-break: normal; } -div.NavigationBox ul a { color: black; text-decoration: none; } -div.NavigationBox ul a:hover { color: #2E74B5; } -div.ArrowBox { height: 25pt; } -div.ArrowBox p { text-align: center; font-size: 18pt; color: #BBBBBB; } -div.ArrowBox:hover { cursor: pointer; } -div.ArrowBox:hover p { color: #2E74B5; } -::-webkit-scrollbar-corner { background: #F0F0F0; } -p.LeftArtifactImageParagraph { margin-top: 2pt; margin-bottom: 2pt; margin-left: 10pt; } -p.LeftArtifactImageParagraph img:hover { cursor: pointer; } -p.SingleCenteredHolePart { text-align: center; } -p.StackTextParagraph { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 7pt; margin-left: 5pt; padding: 2pt 5pt 2pt 5pt; max-height: 100pt; max-width: 100%; display: inline-block; overflow: auto; } -p.TestDetails { margin-bottom: 8pt; } -p.OverviewLinkParagraph { font-size: 8pt; text-align: right; } -table.TestParentBox { margin-top: 3pt; margin-bottom: 6pt; width: 100%; } -table.TestParentBox td.IndentCell { width:0.2in; } -table.TestParentBox td.TestParentNameCell { border-left:1px solid #E6E6E6; border-top: 1px solid #E6E6E6; margin-left: 3pt; margin-top: 1pt; } -table.TestParentBox td.TestParentNameCell p { text-decoration: underline; font-size: 10pt; } -table.TestParentBox td.TestParentNameCell a { color: black; } -table.TestParentBox td.TestParentNameCell a:hover { color: #2E74B5; } -table.TestParentBox td.TotalDurationTextCell { width: 1.2in; text-align: right; border-right:1px solid #E6E6E6; border-top: 1px solid #E6E6E6; margin-top: 1pt; margin-right: 3pt; } -table.TestParentBox td.TotalDurationTextCell p { font-size: 10pt; } -table.TestParentBox td.ResultsIconsCell { border-left: 1px solid #E6E6E6; border-right: 1px solid #E6E6E6; border-bottom: 1px solid #E6E6E6; margin-left: 3pt; margin-right: 3pt; margin-bottom: 1pt; } -table.TestParentBox td.ResultsIconsCell p { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 2pt; line-height: 4pt; } -table.TestParentBox td.ResultsIconsCell img:hover { transform: scale(1.75); transition: transform 0.2s ease; } -ul.EventSummaryText { margin: 0pt 0pt 0pt 20pt; list-style-type: circle; padding: 0pt; } -table.EventTable { width: 100%; margin-bottom: 6pt; table-layout: fixed; } -table.EventTable td.IndentCell { width: 20pt; } -table.EventTable td.ContentCell { border-left: 1px solid #D9E2F3; padding-left: 0.08in; padding-right: 0.08in; } -span.InlineLabel { font-size: 10pt; letter-spacing:0.5pt; font-style: italic; } -span.InlineText { font-size: 9pt; } -p.CodeParagraph { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 8pt; margin-left: 5pt; padding: 2pt 5pt 2pt 5pt;; max-height: 200pt; max-width: 100%; overflow: auto; background-color: #F2F2F2; display: inline-block; white-space: pre; word-break: normal; } -p.BoldText { font-weight: bold; } -span.InternalLink { color: #2E74B5; text-decoration: underline; font-style: italic; } -span.InternalLink:hover { font-weight: bold; } -p.TenPoint { font-size: 10pt; } -p.EightPoint { font-size: 8pt; } -p.BaseFolder { text-decoration: underline; } -p.BaseFolder a { color: black; } -p.BaseFolder a:hover { color: #2E74B5; } -p.SpaceAfterTestParentOverviewParts { font-size: 1pt; margin-bottom:6pt; } -p.PieChartContainer { margin-top: 2pt; margin-bottom: 2pt; text-align: center; } -p.CommandWindowText { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 9pt; border: 1px solid #A6A6A6; padding-top: 1pt; padding-bottom: 1pt; padding-left: 4pt; padding-right: 4pt; max-height:400pt; overflow: auto; white-space: pre; word-break: normal; } -h1.CoverPageTitle { font-size: 36pt; text-align: center; } -table.CoverPageTable { margin-top: 10pt; width: 100%; table-layout: fixed; } -table.CoverPageTable p { font-size: 14pt; } -table.CoverPageTable td { padding-left: 6pt; padding-right: 6pt; vertical-align: top; } -table.CoverPageTable td.CoverPageTableLabel { width: 47%; } -table.CoverPageTable td.CoverPageTableLabel p { text-align: right; } -table.CoverPageTable td.CoverPageTableValue { width: 53%; } -p.TopMargin { margin-top: 20pt; } -p.DiagnosticLabel { font-size: 10pt; letter-spacing:0.5pt; font-style: italic; } -p.EventsLabel { } -p.FailureSummaryText { margin-bottom: 8pt; } -table.FailureSummaryTable { width: 100%; } -table.FailureSummaryTable td { padding-left: 6pt; padding-right: 6pt; } -table.FailureSummaryTable a { color: black; text-decoration: none; } -table.FailureSummaryTable a:hover { color: #2E74B5; text-decoration: underline; } -table.FailureSummaryTable td.FailureSummaryTableIndentColumn { width: 0.2in; } -table.FailureSummaryTable td.TestNameColumn { border-bottom: 1px solid #D0CECE; } -table.FailureSummaryTable td.ReasonsColumn { border-bottom: 1px solid #D0CECE; width: 1.6in; } -table.FailureSummaryTable td.DetailsLinkColumn { text-align: right; width: 0.75in; } -table.FailureSummaryTable tr.FailureSummaryRow p { margin-top: 3pt; } -p.FilterSummaryText { margin-bottom: 8pt; } -table.FilterSummaryTable { width: 100%; } -table.FilterSummaryTable td { padding-left: 6pt; padding-right: 6pt; } -table.FilterSummaryTable a { color: black; text-decoration: none; } -table.FilterSummaryTable a:hover { color: #2E74B5; text-decoration: underline; } -table.FilterSummaryTable td.FilteredSummaryTableIndentColumn { width: 0.2in; } -table.FilterSummaryTable td.TestNameColumn { border-bottom: 1px solid #D0CECE; } -table.FilterSummaryTable td.DetailsLinkColumn { text-align: right; width: 0.7in; } -table.FilterSummaryTable tr.FilterSummaryRow p { margin-top: 3pt; } -h1.Heading1 { font-size: 18pt; letter-spacing: 1pt; border-bottom: 1px solid #ED7D31; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; margin-bottom: 6pt; padding-left: 4pt; } -h2.Heading2 { font-size: 12pt; letter-spacing: 2pt; font-weight: bold; color: white; background-color: #4471C4; border-left: 8pt solid #4471C4; border-top: 4pt solid #4471C4; border-right: 8pt solid #4471C4; border-bottom: 4pt solid #4471C4; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; } -h3.Heading3 { font-size: 12pt; letter-spacing: 2pt; background-color: #D9E2F3; border-left: 8pt solid #D9E2F3; border-top: 4pt solid #D9E2F3; border-right: 8pt solid #D9E2F3; border-bottom: 4pt solid #D9E2F3; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; } -h4.Heading4 { font-size: 11pt; letter-spacing: 1pt; color: #2F5496; border-left: 1px dashed #4471C4; border-top: 1px dashed #4471C4; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; margin-bottom: 10pt; padding-top: 2pt; padding-left: 6pt; } -h5.Heading5 { font-size: 11pt; font-weight: bold; margin-top: 8pt; margin-bottom: 8pt; } -div.NavigationPane { padding: 0pt 10pt 25pt 10pt; position: fixed; right: 10pt; top: 0pt; border-radius: 0pt 0pt 10pt 10pt; z-index: 9999; margin-top: -34pt; background: #F0F0F0; width: 50pt; height: 50%; max-height: 30pt; border-style: solid; border-width: 0px 1px 1px 1px; border-color: #BBBBBB; } -div.NavigationPane.open { transition: all 0.5s ease; margin-top: 0pt; height: 50%; max-height: 50%; width: auto; max-width: 50%; } -div.NavigationBox { width: 100%; height: 100%; overflow: auto; border-width: 0px 0px 1px 0px; border-style: solid; border-color: #DDDDDD; padding-right: 10px; } -div.NavigationBox ul { font-size: 9pt; padding-left: 10pt; } -div.NavigationBox ul p { white-space: pre; word-break: normal; } -div.NavigationBox ul a { color: black; text-decoration: none; } -div.NavigationBox ul a:hover { color: #2E74B5; } -div.ArrowBox { height: 25pt; } -div.ArrowBox p { text-align: center; font-size: 18pt; color: #BBBBBB; } -div.ArrowBox:hover { cursor: pointer; } -div.ArrowBox:hover p { color: #2E74B5; } -::-webkit-scrollbar-corner { background: #F0F0F0; } -p.LeftArtifactImageParagraph { margin-top: 2pt; margin-bottom: 2pt; margin-left: 10pt; } -p.LeftArtifactImageParagraph img:hover { cursor: pointer; } -p.SingleCenteredHolePart { text-align: center; } -p.StackTextParagraph { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 7pt; margin-left: 5pt; padding: 2pt 5pt 2pt 5pt; max-height: 100pt; max-width: 100%; display: inline-block; overflow: auto; } -p.TestDetails { margin-bottom: 8pt; } -p.OverviewLinkParagraph { font-size: 8pt; text-align: right; } -table.TestParentBox { margin-top: 3pt; margin-bottom: 6pt; width: 100%; } -table.TestParentBox td.IndentCell { width:0.2in; } -table.TestParentBox td.TestParentNameCell { border-left:1px solid #E6E6E6; border-top: 1px solid #E6E6E6; margin-left: 3pt; margin-top: 1pt; } -table.TestParentBox td.TestParentNameCell p { text-decoration: underline; font-size: 10pt; } -table.TestParentBox td.TestParentNameCell a { color: black; } -table.TestParentBox td.TestParentNameCell a:hover { color: #2E74B5; } -table.TestParentBox td.TotalDurationTextCell { width: 1.2in; text-align: right; border-right:1px solid #E6E6E6; border-top: 1px solid #E6E6E6; margin-top: 1pt; margin-right: 3pt; } -table.TestParentBox td.TotalDurationTextCell p { font-size: 10pt; } -table.TestParentBox td.ResultsIconsCell { border-left: 1px solid #E6E6E6; border-right: 1px solid #E6E6E6; border-bottom: 1px solid #E6E6E6; margin-left: 3pt; margin-right: 3pt; margin-bottom: 1pt; } -table.TestParentBox td.ResultsIconsCell p { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 2pt; line-height: 4pt; } -table.TestParentBox td.ResultsIconsCell img:hover { transform: scale(1.75); transition: transform 0.2s ease; } -ul.EventSummaryText { margin: 0pt 0pt 0pt 20pt; list-style-type: circle; padding: 0pt; } -table.EventTable { width: 100%; margin-bottom: 6pt; table-layout: fixed; } -table.EventTable td.IndentCell { width: 20pt; } -table.EventTable td.ContentCell { border-left: 1px solid #D9E2F3; padding-left: 0.08in; padding-right: 0.08in; } -span.InlineLabel { font-size: 10pt; letter-spacing:0.5pt; font-style: italic; } -span.InlineText { font-size: 9pt; } -p.CodeParagraph { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 8pt; margin-left: 5pt; padding: 2pt 5pt 2pt 5pt;; max-height: 200pt; max-width: 100%; overflow: auto; background-color: #F2F2F2; display: inline-block; white-space: pre; word-break: normal; } -p.BoldText { font-weight: bold; } -span.InternalLink { color: #2E74B5; text-decoration: underline; font-style: italic; } -span.InternalLink:hover { font-weight: bold; } -p.TenPoint { font-size: 10pt; } -p.EightPoint { font-size: 8pt; } -p.BaseFolder { text-decoration: underline; } -p.BaseFolder a { color: black; } -p.BaseFolder a:hover { color: #2E74B5; } -p.SpaceAfterTestParentOverviewParts { font-size: 1pt; margin-bottom:6pt; } -p.PieChartContainer { margin-top: 2pt; margin-bottom: 2pt; text-align: center; } -p.CommandWindowText { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 9pt; border: 1px solid #A6A6A6; padding-top: 1pt; padding-bottom: 1pt; padding-left: 4pt; padding-right: 4pt; max-height:400pt; overflow: auto; white-space: pre; word-break: normal; } -h1.CoverPageTitle { font-size: 36pt; text-align: center; } -table.CoverPageTable { margin-top: 10pt; width: 100%; table-layout: fixed; } -table.CoverPageTable p { font-size: 14pt; } -table.CoverPageTable td { padding-left: 6pt; padding-right: 6pt; vertical-align: top; } -table.CoverPageTable td.CoverPageTableLabel { width: 47%; } -table.CoverPageTable td.CoverPageTableLabel p { text-align: right; } -table.CoverPageTable td.CoverPageTableValue { width: 53%; } -p.TopMargin { margin-top: 20pt; } -p.DiagnosticLabel { font-size: 10pt; letter-spacing:0.5pt; font-style: italic; } -p.EventsLabel { } -p.FailureSummaryText { margin-bottom: 8pt; } -table.FailureSummaryTable { width: 100%; } -table.FailureSummaryTable td { padding-left: 6pt; padding-right: 6pt; } -table.FailureSummaryTable a { color: black; text-decoration: none; } -table.FailureSummaryTable a:hover { color: #2E74B5; text-decoration: underline; } -table.FailureSummaryTable td.FailureSummaryTableIndentColumn { width: 0.2in; } -table.FailureSummaryTable td.TestNameColumn { border-bottom: 1px solid #D0CECE; } -table.FailureSummaryTable td.ReasonsColumn { border-bottom: 1px solid #D0CECE; width: 1.6in; } -table.FailureSummaryTable td.DetailsLinkColumn { text-align: right; width: 0.75in; } -table.FailureSummaryTable tr.FailureSummaryRow p { margin-top: 3pt; } -p.FilterSummaryText { margin-bottom: 8pt; } -table.FilterSummaryTable { width: 100%; } -table.FilterSummaryTable td { padding-left: 6pt; padding-right: 6pt; } -table.FilterSummaryTable a { color: black; text-decoration: none; } -table.FilterSummaryTable a:hover { color: #2E74B5; text-decoration: underline; } -table.FilterSummaryTable td.FilteredSummaryTableIndentColumn { width: 0.2in; } -table.FilterSummaryTable td.TestNameColumn { border-bottom: 1px solid #D0CECE; } -table.FilterSummaryTable td.DetailsLinkColumn { text-align: right; width: 0.7in; } -table.FilterSummaryTable tr.FilterSummaryRow p { margin-top: 3pt; } -h1.Heading1 { font-size: 18pt; letter-spacing: 1pt; border-bottom: 1px solid #ED7D31; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; margin-bottom: 6pt; padding-left: 4pt; } -h2.Heading2 { font-size: 12pt; letter-spacing: 2pt; font-weight: bold; color: white; background-color: #4471C4; border-left: 8pt solid #4471C4; border-top: 4pt solid #4471C4; border-right: 8pt solid #4471C4; border-bottom: 4pt solid #4471C4; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; } -h3.Heading3 { font-size: 12pt; letter-spacing: 2pt; background-color: #D9E2F3; border-left: 8pt solid #D9E2F3; border-top: 4pt solid #D9E2F3; border-right: 8pt solid #D9E2F3; border-bottom: 4pt solid #D9E2F3; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; } -h4.Heading4 { font-size: 11pt; letter-spacing: 1pt; color: #2F5496; border-left: 1px dashed #4471C4; border-top: 1px dashed #4471C4; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; margin-bottom: 10pt; padding-top: 2pt; padding-left: 6pt; } -h5.Heading5 { font-size: 11pt; font-weight: bold; margin-top: 8pt; margin-bottom: 8pt; } -div.NavigationPane { padding: 0pt 10pt 25pt 10pt; position: fixed; right: 10pt; top: 0pt; border-radius: 0pt 0pt 10pt 10pt; z-index: 9999; margin-top: -34pt; background: #F0F0F0; width: 50pt; height: 50%; max-height: 30pt; border-style: solid; border-width: 0px 1px 1px 1px; border-color: #BBBBBB; } -div.NavigationPane.open { transition: all 0.5s ease; margin-top: 0pt; height: 50%; max-height: 50%; width: auto; max-width: 50%; } -div.NavigationBox { width: 100%; height: 100%; overflow: auto; border-width: 0px 0px 1px 0px; border-style: solid; border-color: #DDDDDD; padding-right: 10px; } -div.NavigationBox ul { font-size: 9pt; padding-left: 10pt; } -div.NavigationBox ul p { white-space: pre; word-break: normal; } -div.NavigationBox ul a { color: black; text-decoration: none; } -div.NavigationBox ul a:hover { color: #2E74B5; } -div.ArrowBox { height: 25pt; } -div.ArrowBox p { text-align: center; font-size: 18pt; color: #BBBBBB; } -div.ArrowBox:hover { cursor: pointer; } -div.ArrowBox:hover p { color: #2E74B5; } -::-webkit-scrollbar-corner { background: #F0F0F0; } -p.LeftArtifactImageParagraph { margin-top: 2pt; margin-bottom: 2pt; margin-left: 10pt; } -p.LeftArtifactImageParagraph img:hover { cursor: pointer; } -p.SingleCenteredHolePart { text-align: center; } -p.StackTextParagraph { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 7pt; margin-left: 5pt; padding: 2pt 5pt 2pt 5pt; max-height: 100pt; max-width: 100%; display: inline-block; overflow: auto; } -p.TestDetails { margin-bottom: 8pt; } -p.OverviewLinkParagraph { font-size: 8pt; text-align: right; } -table.TestParentBox { margin-top: 3pt; margin-bottom: 6pt; width: 100%; } -table.TestParentBox td.IndentCell { width:0.2in; } -table.TestParentBox td.TestParentNameCell { border-left:1px solid #E6E6E6; border-top: 1px solid #E6E6E6; margin-left: 3pt; margin-top: 1pt; } -table.TestParentBox td.TestParentNameCell p { text-decoration: underline; font-size: 10pt; } -table.TestParentBox td.TestParentNameCell a { color: black; } -table.TestParentBox td.TestParentNameCell a:hover { color: #2E74B5; } -table.TestParentBox td.TotalDurationTextCell { width: 1.2in; text-align: right; border-right:1px solid #E6E6E6; border-top: 1px solid #E6E6E6; margin-top: 1pt; margin-right: 3pt; } -table.TestParentBox td.TotalDurationTextCell p { font-size: 10pt; } -table.TestParentBox td.ResultsIconsCell { border-left: 1px solid #E6E6E6; border-right: 1px solid #E6E6E6; border-bottom: 1px solid #E6E6E6; margin-left: 3pt; margin-right: 3pt; margin-bottom: 1pt; } -table.TestParentBox td.ResultsIconsCell p { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 2pt; line-height: 4pt; } -table.TestParentBox td.ResultsIconsCell img:hover { transform: scale(1.75); transition: transform 0.2s ease; } -ul.EventSummaryText { margin: 0pt 0pt 0pt 20pt; list-style-type: circle; padding: 0pt; } -table.EventTable { width: 100%; margin-bottom: 6pt; table-layout: fixed; } -table.EventTable td.IndentCell { width: 20pt; } -table.EventTable td.ContentCell { border-left: 1px solid #D9E2F3; padding-left: 0.08in; padding-right: 0.08in; } -span.InlineLabel { font-size: 10pt; letter-spacing:0.5pt; font-style: italic; } -span.InlineText { font-size: 9pt; } -p.CodeParagraph { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 8pt; margin-left: 5pt; padding: 2pt 5pt 2pt 5pt;; max-height: 200pt; max-width: 100%; overflow: auto; background-color: #F2F2F2; display: inline-block; white-space: pre; word-break: normal; } -p.BoldText { font-weight: bold; } -span.InternalLink { color: #2E74B5; text-decoration: underline; font-style: italic; } -span.InternalLink:hover { font-weight: bold; } -p.TenPoint { font-size: 10pt; } -p.EightPoint { font-size: 8pt; } -p.BaseFolder { text-decoration: underline; } -p.BaseFolder a { color: black; } -p.BaseFolder a:hover { color: #2E74B5; } -p.SpaceAfterTestParentOverviewParts { font-size: 1pt; margin-bottom:6pt; } -p.PieChartContainer { margin-top: 2pt; margin-bottom: 2pt; text-align: center; } -p.CommandWindowText { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 9pt; border: 1px solid #A6A6A6; padding-top: 1pt; padding-bottom: 1pt; padding-left: 4pt; padding-right: 4pt; max-height:400pt; overflow: auto; white-space: pre; word-break: normal; } -h1.CoverPageTitle { font-size: 36pt; text-align: center; } -table.CoverPageTable { margin-top: 10pt; width: 100%; table-layout: fixed; } -table.CoverPageTable p { font-size: 14pt; } -table.CoverPageTable td { padding-left: 6pt; padding-right: 6pt; vertical-align: top; } -table.CoverPageTable td.CoverPageTableLabel { width: 47%; } -table.CoverPageTable td.CoverPageTableLabel p { text-align: right; } -table.CoverPageTable td.CoverPageTableValue { width: 53%; } -p.TopMargin { margin-top: 20pt; } -p.DiagnosticLabel { font-size: 10pt; letter-spacing:0.5pt; font-style: italic; } -p.EventsLabel { } -p.FailureSummaryText { margin-bottom: 8pt; } -table.FailureSummaryTable { width: 100%; } -table.FailureSummaryTable td { padding-left: 6pt; padding-right: 6pt; } -table.FailureSummaryTable a { color: black; text-decoration: none; } -table.FailureSummaryTable a:hover { color: #2E74B5; text-decoration: underline; } -table.FailureSummaryTable td.FailureSummaryTableIndentColumn { width: 0.2in; } -table.FailureSummaryTable td.TestNameColumn { border-bottom: 1px solid #D0CECE; } -table.FailureSummaryTable td.ReasonsColumn { border-bottom: 1px solid #D0CECE; width: 1.6in; } -table.FailureSummaryTable td.DetailsLinkColumn { text-align: right; width: 0.75in; } -table.FailureSummaryTable tr.FailureSummaryRow p { margin-top: 3pt; } -p.FilterSummaryText { margin-bottom: 8pt; } -table.FilterSummaryTable { width: 100%; } -table.FilterSummaryTable td { padding-left: 6pt; padding-right: 6pt; } -table.FilterSummaryTable a { color: black; text-decoration: none; } -table.FilterSummaryTable a:hover { color: #2E74B5; text-decoration: underline; } -table.FilterSummaryTable td.FilteredSummaryTableIndentColumn { width: 0.2in; } -table.FilterSummaryTable td.TestNameColumn { border-bottom: 1px solid #D0CECE; } -table.FilterSummaryTable td.DetailsLinkColumn { text-align: right; width: 0.7in; } -table.FilterSummaryTable tr.FilterSummaryRow p { margin-top: 3pt; } -h1.Heading1 { font-size: 18pt; letter-spacing: 1pt; border-bottom: 1px solid #ED7D31; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; margin-bottom: 6pt; padding-left: 4pt; } -h2.Heading2 { font-size: 12pt; letter-spacing: 2pt; font-weight: bold; color: white; background-color: #4471C4; border-left: 8pt solid #4471C4; border-top: 4pt solid #4471C4; border-right: 8pt solid #4471C4; border-bottom: 4pt solid #4471C4; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; } -h3.Heading3 { font-size: 12pt; letter-spacing: 2pt; background-color: #D9E2F3; border-left: 8pt solid #D9E2F3; border-top: 4pt solid #D9E2F3; border-right: 8pt solid #D9E2F3; border-bottom: 4pt solid #D9E2F3; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; } -h4.Heading4 { font-size: 11pt; letter-spacing: 1pt; color: #2F5496; border-left: 1px dashed #4471C4; border-top: 1px dashed #4471C4; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; margin-bottom: 10pt; padding-top: 2pt; padding-left: 6pt; } -h5.Heading5 { font-size: 11pt; font-weight: bold; margin-top: 8pt; margin-bottom: 8pt; } -div.NavigationPane { padding: 0pt 10pt 25pt 10pt; position: fixed; right: 10pt; top: 0pt; border-radius: 0pt 0pt 10pt 10pt; z-index: 9999; margin-top: -34pt; background: #F0F0F0; width: 50pt; height: 50%; max-height: 30pt; border-style: solid; border-width: 0px 1px 1px 1px; border-color: #BBBBBB; } -div.NavigationPane.open { transition: all 0.5s ease; margin-top: 0pt; height: 50%; max-height: 50%; width: auto; max-width: 50%; } -div.NavigationBox { width: 100%; height: 100%; overflow: auto; border-width: 0px 0px 1px 0px; border-style: solid; border-color: #DDDDDD; padding-right: 10px; } -div.NavigationBox ul { font-size: 9pt; padding-left: 10pt; } -div.NavigationBox ul p { white-space: pre; word-break: normal; } -div.NavigationBox ul a { color: black; text-decoration: none; } -div.NavigationBox ul a:hover { color: #2E74B5; } -div.ArrowBox { height: 25pt; } -div.ArrowBox p { text-align: center; font-size: 18pt; color: #BBBBBB; } -div.ArrowBox:hover { cursor: pointer; } -div.ArrowBox:hover p { color: #2E74B5; } -::-webkit-scrollbar-corner { background: #F0F0F0; } -p.LeftArtifactImageParagraph { margin-top: 2pt; margin-bottom: 2pt; margin-left: 10pt; } -p.LeftArtifactImageParagraph img:hover { cursor: pointer; } -p.SingleCenteredHolePart { text-align: center; } -p.StackTextParagraph { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 7pt; margin-left: 5pt; padding: 2pt 5pt 2pt 5pt; max-height: 100pt; max-width: 100%; display: inline-block; overflow: auto; } -p.TestDetails { margin-bottom: 8pt; } -p.OverviewLinkParagraph { font-size: 8pt; text-align: right; } -table.TestParentBox { margin-top: 3pt; margin-bottom: 6pt; width: 100%; } -table.TestParentBox td.IndentCell { width:0.2in; } -table.TestParentBox td.TestParentNameCell { border-left:1px solid #E6E6E6; border-top: 1px solid #E6E6E6; margin-left: 3pt; margin-top: 1pt; } -table.TestParentBox td.TestParentNameCell p { text-decoration: underline; font-size: 10pt; } -table.TestParentBox td.TestParentNameCell a { color: black; } -table.TestParentBox td.TestParentNameCell a:hover { color: #2E74B5; } -table.TestParentBox td.TotalDurationTextCell { width: 1.2in; text-align: right; border-right:1px solid #E6E6E6; border-top: 1px solid #E6E6E6; margin-top: 1pt; margin-right: 3pt; } -table.TestParentBox td.TotalDurationTextCell p { font-size: 10pt; } -table.TestParentBox td.ResultsIconsCell { border-left: 1px solid #E6E6E6; border-right: 1px solid #E6E6E6; border-bottom: 1px solid #E6E6E6; margin-left: 3pt; margin-right: 3pt; margin-bottom: 1pt; } -table.TestParentBox td.ResultsIconsCell p { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 2pt; line-height: 4pt; } -table.TestParentBox td.ResultsIconsCell img:hover { transform: scale(1.75); transition: transform 0.2s ease; } diff --git a/report/R2023a/stylesheets/root.css b/report/R2023a/stylesheets/root.css deleted file mode 100644 index 8bdb6f6..0000000 --- a/report/R2023a/stylesheets/root.css +++ /dev/null @@ -1,19 +0,0 @@ -p { - font-family: 'Calibri Light', Calibri, Segoe, Optima, Arial, 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, rg-body; - font-size: 11pt; - white-space: pre-wrap; - word-break: break-word; - margin: 0px; -} -div.PageContainer { - padding:20pt; - margin: auto; - min-width:7.5in; -} -h1, h2, h3, h4, h5, h6 { - font-family: 'Calibri Light', Calibri, Segoe, Optima, Arial, 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, rg-title; - font-weight: normal; - white-space: pre; - word-break: break-word; - margin: 0px; -} \ No newline at end of file diff --git a/report/R2023a/test-results.xml b/report/R2023a/test-results.xml deleted file mode 100644 index 4eb7af3..0000000 --- a/report/R2023a/test-results.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/report/R2023a/testreport.html b/report/R2023a/testreport.html deleted file mode 100644 index c8ed3c1..0000000 --- a/report/R2023a/testreport.html +++ /dev/null @@ -1,380 +0,0 @@ - - - - - - - - - - -
- - -

- -

MATLABĀ® Test Report

- - - - - - - - - - - - - - - - - -
-

Timestamp:

-
-

19-Apr-2023 16:58:17

-
-

Host:

-
-

MATHWORKS-Zz8wx

-
-

Platform:

-
-

win64

-
-

MATLAB Version:

-
-

9.14.0.2206163 (R2023a)

-
- - - - - - - - - -
-

Number of Tests:

-
-

17

-
-

Testing Time:

-
-

272.9091 seconds

-
- - - - - -
-

Overall Result:

-
-

PASSED

-
- -

- - - - -

Overview

- -

C:\Users\esmithzb\OneDrive - MathWorks\Scripts\Curriculum Modules\Mathematics\Calculus-Integrals\tests\

- - - - - - - - - - - -
-

-
-

smokeTests

-
-

272.9091 seconds

-
-

-
-

-
- -

- - - - -

Details

- - -

C:\Users\esmithzb\OneDrive - MathWorks\Scripts\Curriculum Modules\Mathematics\Calculus-Integrals\tests\

- - -

smokeTests

- - -

testMLX

- -

The test passed. -Duration: 20.4414 seconds

- -

(Overview)

- - - - -

testMAT

- -

The test passed. -Duration: 0.0932 seconds

- -

(Overview)

- - - - -

testSLX

- -

The test passed. -Duration: 0.1179 seconds

- -

(Overview)

- - - - -

runintegralAntiderivatives

- -

The test passed. -Duration: 7.2061 seconds

- -

(Overview)

- - - - -

runintegralByParts

- -

The test passed. -Duration: 14.7919 seconds

- -

(Overview)

- - - - -

runintegralFundamentalTheorem

- -

The test passed. -Duration: 6.2608 seconds

- -

(Overview)

- - - - -

runintegralRiemann

- -

The test passed. -Duration: 125.8116 seconds

- -

(Overview)

- - - - -

runintegralSubstitution

- -

The test passed. -Duration: 17.3628 seconds

- -

(Overview)

- - - - -

runpracticeAntiderivatives

- -

The test passed. -Duration: 0.8199 seconds

- -

(Overview)

- - - - -

runpracticeByParts

- -

The test passed. -Duration: 4.0731 seconds

- -

(Overview)

- - - - -

runpracticeFundamentalTheorem

- -

The test passed. -Duration: 0.7138 seconds

- -

(Overview)

- - - - -

runpracticeSubstitution

- -

The test passed. -Duration: 1.1494 seconds

- -

(Overview)

- - - - -

runvizAntiderivatives

- -

The test passed. -Duration: 4.1436 seconds

- -

(Overview)

- - - - -

runvizByParts

- -

The test passed. -Duration: 4.0040 seconds

- -

(Overview)

- - - - -

runvizFundamentalTheorem

- -

The test passed. -Duration: 2.7637 seconds

- -

(Overview)

- - - - -

runvizRiemann

- -

The test passed. -Duration: 55.2051 seconds

- -

(Overview)

- - - - -

runvizSubstitution

- -

The test passed. -Duration: 7.9508 seconds

- -

(Overview)

- - - - - - - - - - -
- - \ No newline at end of file diff --git a/report/[Content_Types].xml b/report/[Content_Types].xml deleted file mode 100644 index 44d21b8..0000000 --- a/report/[Content_Types].xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/report/_rels/.rels b/report/_rels/.rels deleted file mode 100644 index d7b3f5b..0000000 --- a/report/_rels/.rels +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/report/_rels/index.html.rels b/report/_rels/index.html.rels deleted file mode 100644 index c719dd5..0000000 --- a/report/_rels/index.html.rels +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/report/badge/code_issues.json b/report/badge/code_issues.json deleted file mode 100644 index 44ed751..0000000 --- a/report/badge/code_issues.json +++ /dev/null @@ -1 +0,0 @@ -{"schemaVersion":1,"label":"code issues","message":"0","color":"success"} \ No newline at end of file diff --git a/report/badge/tested_with.json b/report/badge/tested_with.json deleted file mode 100644 index a7d8087..0000000 --- a/report/badge/tested_with.json +++ /dev/null @@ -1 +0,0 @@ -{"schemaVersion":1,"label":"tested with","message":"R2022b | R2023a","color":"success"} \ No newline at end of file diff --git a/report/images/image1.png b/report/images/image1.png deleted file mode 100644 index c8a07cf..0000000 Binary files a/report/images/image1.png and /dev/null differ diff --git a/report/images/image2.svg b/report/images/image2.svg deleted file mode 100644 index f4f4de0..0000000 --- a/report/images/image2.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - diff --git a/report/stylesheets/combined.css b/report/stylesheets/combined.css deleted file mode 100644 index 5a3c88b..0000000 --- a/report/stylesheets/combined.css +++ /dev/null @@ -1,405 +0,0 @@ -ul.EventSummaryText { margin: 0pt 0pt 0pt 20pt; list-style-type: circle; padding: 0pt; } -table.EventTable { width: 100%; margin-bottom: 6pt; table-layout: fixed; } -table.EventTable td.IndentCell { width: 20pt; } -table.EventTable td.ContentCell { border-left: 1px solid #D9E2F3; padding-left: 0.08in; padding-right: 0.08in; } -span.InlineLabel { font-size: 10pt; letter-spacing:0.5pt; font-style: italic; } -span.InlineText { font-size: 9pt; } -p.CodeParagraph { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 8pt; margin-left: 5pt; padding: 2pt 5pt 2pt 5pt;; max-height: 200pt; max-width: 100%; overflow: auto; background-color: #F2F2F2; display: inline-block; white-space: pre; word-break: normal; } -p.BoldText { font-weight: bold; } -span.InternalLink { color: #2E74B5; text-decoration: underline; font-style: italic; } -span.InternalLink:hover { font-weight: bold; } -p.TenPoint { font-size: 10pt; } -p.EightPoint { font-size: 8pt; } -p.BaseFolder { text-decoration: underline; } -p.BaseFolder a { color: black; } -p.BaseFolder a:hover { color: #2E74B5; } -p.SpaceAfterTestParentOverviewParts { font-size: 1pt; margin-bottom:6pt; } -p.PieChartContainer { margin-top: 2pt; margin-bottom: 2pt; text-align: center; } -p.CommandWindowText { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 9pt; border: 1px solid #A6A6A6; padding-top: 1pt; padding-bottom: 1pt; padding-left: 4pt; padding-right: 4pt; max-height:400pt; overflow: auto; white-space: pre; word-break: normal; } -h1.CoverPageTitle { font-size: 36pt; text-align: center; } -table.CoverPageTable { margin-top: 10pt; width: 100%; table-layout: fixed; } -table.CoverPageTable p { font-size: 14pt; } -table.CoverPageTable td { padding-left: 6pt; padding-right: 6pt; vertical-align: top; } -table.CoverPageTable td.CoverPageTableLabel { width: 47%; } -table.CoverPageTable td.CoverPageTableLabel p { text-align: right; } -table.CoverPageTable td.CoverPageTableValue { width: 53%; } -p.TopMargin { margin-top: 20pt; } -p.DiagnosticLabel { font-size: 10pt; letter-spacing:0.5pt; font-style: italic; } -p.EventsLabel { } -p.FailureSummaryText { margin-bottom: 8pt; } -table.FailureSummaryTable { width: 100%; } -table.FailureSummaryTable td { padding-left: 6pt; padding-right: 6pt; } -table.FailureSummaryTable a { color: black; text-decoration: none; } -table.FailureSummaryTable a:hover { color: #2E74B5; text-decoration: underline; } -table.FailureSummaryTable td.FailureSummaryTableIndentColumn { width: 0.2in; } -table.FailureSummaryTable td.TestNameColumn { border-bottom: 1px solid #D0CECE; } -table.FailureSummaryTable td.ReasonsColumn { border-bottom: 1px solid #D0CECE; width: 1.6in; } -table.FailureSummaryTable td.DetailsLinkColumn { text-align: right; width: 0.75in; } -table.FailureSummaryTable tr.FailureSummaryRow p { margin-top: 3pt; } -p.FilterSummaryText { margin-bottom: 8pt; } -table.FilterSummaryTable { width: 100%; } -table.FilterSummaryTable td { padding-left: 6pt; padding-right: 6pt; } -table.FilterSummaryTable a { color: black; text-decoration: none; } -table.FilterSummaryTable a:hover { color: #2E74B5; text-decoration: underline; } -table.FilterSummaryTable td.FilteredSummaryTableIndentColumn { width: 0.2in; } -table.FilterSummaryTable td.TestNameColumn { border-bottom: 1px solid #D0CECE; } -table.FilterSummaryTable td.DetailsLinkColumn { text-align: right; width: 0.7in; } -table.FilterSummaryTable tr.FilterSummaryRow p { margin-top: 3pt; } -h1.Heading1 { font-size: 18pt; letter-spacing: 1pt; border-bottom: 1px solid #ED7D31; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; margin-bottom: 6pt; padding-left: 4pt; } -h2.Heading2 { font-size: 12pt; letter-spacing: 2pt; font-weight: bold; color: white; background-color: #4471C4; border-left: 8pt solid #4471C4; border-top: 4pt solid #4471C4; border-right: 8pt solid #4471C4; border-bottom: 4pt solid #4471C4; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; } -h3.Heading3 { font-size: 12pt; letter-spacing: 2pt; background-color: #D9E2F3; border-left: 8pt solid #D9E2F3; border-top: 4pt solid #D9E2F3; border-right: 8pt solid #D9E2F3; border-bottom: 4pt solid #D9E2F3; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; } -h4.Heading4 { font-size: 11pt; letter-spacing: 1pt; color: #2F5496; border-left: 1px dashed #4471C4; border-top: 1px dashed #4471C4; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; margin-bottom: 10pt; padding-top: 2pt; padding-left: 6pt; } -h5.Heading5 { font-size: 11pt; font-weight: bold; margin-top: 8pt; margin-bottom: 8pt; } -div.NavigationPane { padding: 0pt 10pt 25pt 10pt; position: fixed; right: 10pt; top: 0pt; border-radius: 0pt 0pt 10pt 10pt; z-index: 9999; margin-top: -34pt; background: #F0F0F0; width: 50pt; height: 50%; max-height: 30pt; border-style: solid; border-width: 0px 1px 1px 1px; border-color: #BBBBBB; } -div.NavigationPane.open { transition: all 0.5s ease; margin-top: 0pt; height: 50%; max-height: 50%; width: auto; max-width: 50%; } -div.NavigationBox { width: 100%; height: 100%; overflow: auto; border-width: 0px 0px 1px 0px; border-style: solid; border-color: #DDDDDD; padding-right: 10px; } -div.NavigationBox ul { font-size: 9pt; padding-left: 10pt; } -div.NavigationBox ul p { white-space: pre; word-break: normal; } -div.NavigationBox ul a { color: black; text-decoration: none; } -div.NavigationBox ul a:hover { color: #2E74B5; } -div.ArrowBox { height: 25pt; } -div.ArrowBox p { text-align: center; font-size: 18pt; color: #BBBBBB; } -div.ArrowBox:hover { cursor: pointer; } -div.ArrowBox:hover p { color: #2E74B5; } -::-webkit-scrollbar-corner { background: #F0F0F0; } -p.LeftArtifactImageParagraph { margin-top: 2pt; margin-bottom: 2pt; margin-left: 10pt; } -p.LeftArtifactImageParagraph img:hover { cursor: pointer; } -p.SingleCenteredHolePart { text-align: center; } -p.StackTextParagraph { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 7pt; margin-left: 5pt; padding: 2pt 5pt 2pt 5pt; max-height: 100pt; max-width: 100%; display: inline-block; overflow: auto; } -p.TestDetails { margin-bottom: 8pt; } -p.OverviewLinkParagraph { font-size: 8pt; text-align: right; } -table.TestParentBox { margin-top: 3pt; margin-bottom: 6pt; width: 100%; } -table.TestParentBox td.IndentCell { width:0.2in; } -table.TestParentBox td.TestParentNameCell { border-left:1px solid #E6E6E6; border-top: 1px solid #E6E6E6; margin-left: 3pt; margin-top: 1pt; } -table.TestParentBox td.TestParentNameCell p { text-decoration: underline; font-size: 10pt; } -table.TestParentBox td.TestParentNameCell a { color: black; } -table.TestParentBox td.TestParentNameCell a:hover { color: #2E74B5; } -table.TestParentBox td.TotalDurationTextCell { width: 1.2in; text-align: right; border-right:1px solid #E6E6E6; border-top: 1px solid #E6E6E6; margin-top: 1pt; margin-right: 3pt; } -table.TestParentBox td.TotalDurationTextCell p { font-size: 10pt; } -table.TestParentBox td.ResultsIconsCell { border-left: 1px solid #E6E6E6; border-right: 1px solid #E6E6E6; border-bottom: 1px solid #E6E6E6; margin-left: 3pt; margin-right: 3pt; margin-bottom: 1pt; } -table.TestParentBox td.ResultsIconsCell p { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 2pt; line-height: 4pt; } -table.TestParentBox td.ResultsIconsCell img:hover { transform: scale(1.75); transition: transform 0.2s ease; } -ul.EventSummaryText { margin: 0pt 0pt 0pt 20pt; list-style-type: circle; padding: 0pt; } -table.EventTable { width: 100%; margin-bottom: 6pt; table-layout: fixed; } -table.EventTable td.IndentCell { width: 20pt; } -table.EventTable td.ContentCell { border-left: 1px solid #D9E2F3; padding-left: 0.08in; padding-right: 0.08in; } -span.InlineLabel { font-size: 10pt; letter-spacing:0.5pt; font-style: italic; } -span.InlineText { font-size: 9pt; } -p.CodeParagraph { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 8pt; margin-left: 5pt; padding: 2pt 5pt 2pt 5pt;; max-height: 200pt; max-width: 100%; overflow: auto; background-color: #F2F2F2; display: inline-block; white-space: pre; word-break: normal; } -p.BoldText { font-weight: bold; } -span.InternalLink { color: #2E74B5; text-decoration: underline; font-style: italic; } -span.InternalLink:hover { font-weight: bold; } -p.TenPoint { font-size: 10pt; } -p.EightPoint { font-size: 8pt; } -p.BaseFolder { text-decoration: underline; } -p.BaseFolder a { color: black; } -p.BaseFolder a:hover { color: #2E74B5; } -p.SpaceAfterTestParentOverviewParts { font-size: 1pt; margin-bottom:6pt; } -p.PieChartContainer { margin-top: 2pt; margin-bottom: 2pt; text-align: center; } -p.CommandWindowText { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 9pt; border: 1px solid #A6A6A6; padding-top: 1pt; padding-bottom: 1pt; padding-left: 4pt; padding-right: 4pt; max-height:400pt; overflow: auto; white-space: pre; word-break: normal; } -h1.CoverPageTitle { font-size: 36pt; text-align: center; } -table.CoverPageTable { margin-top: 10pt; width: 100%; table-layout: fixed; } -table.CoverPageTable p { font-size: 14pt; } -table.CoverPageTable td { padding-left: 6pt; padding-right: 6pt; vertical-align: top; } -table.CoverPageTable td.CoverPageTableLabel { width: 47%; } -table.CoverPageTable td.CoverPageTableLabel p { text-align: right; } -table.CoverPageTable td.CoverPageTableValue { width: 53%; } -p.TopMargin { margin-top: 20pt; } -p.DiagnosticLabel { font-size: 10pt; letter-spacing:0.5pt; font-style: italic; } -p.EventsLabel { } -p.FailureSummaryText { margin-bottom: 8pt; } -table.FailureSummaryTable { width: 100%; } -table.FailureSummaryTable td { padding-left: 6pt; padding-right: 6pt; } -table.FailureSummaryTable a { color: black; text-decoration: none; } -table.FailureSummaryTable a:hover { color: #2E74B5; text-decoration: underline; } -table.FailureSummaryTable td.FailureSummaryTableIndentColumn { width: 0.2in; } -table.FailureSummaryTable td.TestNameColumn { border-bottom: 1px solid #D0CECE; } -table.FailureSummaryTable td.ReasonsColumn { border-bottom: 1px solid #D0CECE; width: 1.6in; } -table.FailureSummaryTable td.DetailsLinkColumn { text-align: right; width: 0.75in; } -table.FailureSummaryTable tr.FailureSummaryRow p { margin-top: 3pt; } -p.FilterSummaryText { margin-bottom: 8pt; } -table.FilterSummaryTable { width: 100%; } -table.FilterSummaryTable td { padding-left: 6pt; padding-right: 6pt; } -table.FilterSummaryTable a { color: black; text-decoration: none; } -table.FilterSummaryTable a:hover { color: #2E74B5; text-decoration: underline; } -table.FilterSummaryTable td.FilteredSummaryTableIndentColumn { width: 0.2in; } -table.FilterSummaryTable td.TestNameColumn { border-bottom: 1px solid #D0CECE; } -table.FilterSummaryTable td.DetailsLinkColumn { text-align: right; width: 0.7in; } -table.FilterSummaryTable tr.FilterSummaryRow p { margin-top: 3pt; } -h1.Heading1 { font-size: 18pt; letter-spacing: 1pt; border-bottom: 1px solid #ED7D31; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; margin-bottom: 6pt; padding-left: 4pt; } -h2.Heading2 { font-size: 12pt; letter-spacing: 2pt; font-weight: bold; color: white; background-color: #4471C4; border-left: 8pt solid #4471C4; border-top: 4pt solid #4471C4; border-right: 8pt solid #4471C4; border-bottom: 4pt solid #4471C4; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; } -h3.Heading3 { font-size: 12pt; letter-spacing: 2pt; background-color: #D9E2F3; border-left: 8pt solid #D9E2F3; border-top: 4pt solid #D9E2F3; border-right: 8pt solid #D9E2F3; border-bottom: 4pt solid #D9E2F3; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; } -h4.Heading4 { font-size: 11pt; letter-spacing: 1pt; color: #2F5496; border-left: 1px dashed #4471C4; border-top: 1px dashed #4471C4; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; margin-bottom: 10pt; padding-top: 2pt; padding-left: 6pt; } -h5.Heading5 { font-size: 11pt; font-weight: bold; margin-top: 8pt; margin-bottom: 8pt; } -div.NavigationPane { padding: 0pt 10pt 25pt 10pt; position: fixed; right: 10pt; top: 0pt; border-radius: 0pt 0pt 10pt 10pt; z-index: 9999; margin-top: -34pt; background: #F0F0F0; width: 50pt; height: 50%; max-height: 30pt; border-style: solid; border-width: 0px 1px 1px 1px; border-color: #BBBBBB; } -div.NavigationPane.open { transition: all 0.5s ease; margin-top: 0pt; height: 50%; max-height: 50%; width: auto; max-width: 50%; } -div.NavigationBox { width: 100%; height: 100%; overflow: auto; border-width: 0px 0px 1px 0px; border-style: solid; border-color: #DDDDDD; padding-right: 10px; } -div.NavigationBox ul { font-size: 9pt; padding-left: 10pt; } -div.NavigationBox ul p { white-space: pre; word-break: normal; } -div.NavigationBox ul a { color: black; text-decoration: none; } -div.NavigationBox ul a:hover { color: #2E74B5; } -div.ArrowBox { height: 25pt; } -div.ArrowBox p { text-align: center; font-size: 18pt; color: #BBBBBB; } -div.ArrowBox:hover { cursor: pointer; } -div.ArrowBox:hover p { color: #2E74B5; } -::-webkit-scrollbar-corner { background: #F0F0F0; } -p.LeftArtifactImageParagraph { margin-top: 2pt; margin-bottom: 2pt; margin-left: 10pt; } -p.LeftArtifactImageParagraph img:hover { cursor: pointer; } -p.SingleCenteredHolePart { text-align: center; } -p.StackTextParagraph { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 7pt; margin-left: 5pt; padding: 2pt 5pt 2pt 5pt; max-height: 100pt; max-width: 100%; display: inline-block; overflow: auto; } -p.TestDetails { margin-bottom: 8pt; } -p.OverviewLinkParagraph { font-size: 8pt; text-align: right; } -table.TestParentBox { margin-top: 3pt; margin-bottom: 6pt; width: 100%; } -table.TestParentBox td.IndentCell { width:0.2in; } -table.TestParentBox td.TestParentNameCell { border-left:1px solid #E6E6E6; border-top: 1px solid #E6E6E6; margin-left: 3pt; margin-top: 1pt; } -table.TestParentBox td.TestParentNameCell p { text-decoration: underline; font-size: 10pt; } -table.TestParentBox td.TestParentNameCell a { color: black; } -table.TestParentBox td.TestParentNameCell a:hover { color: #2E74B5; } -table.TestParentBox td.TotalDurationTextCell { width: 1.2in; text-align: right; border-right:1px solid #E6E6E6; border-top: 1px solid #E6E6E6; margin-top: 1pt; margin-right: 3pt; } -table.TestParentBox td.TotalDurationTextCell p { font-size: 10pt; } -table.TestParentBox td.ResultsIconsCell { border-left: 1px solid #E6E6E6; border-right: 1px solid #E6E6E6; border-bottom: 1px solid #E6E6E6; margin-left: 3pt; margin-right: 3pt; margin-bottom: 1pt; } -table.TestParentBox td.ResultsIconsCell p { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 2pt; line-height: 4pt; } -table.TestParentBox td.ResultsIconsCell img:hover { transform: scale(1.75); transition: transform 0.2s ease; } -ul.EventSummaryText { margin: 0pt 0pt 0pt 20pt; list-style-type: circle; padding: 0pt; } -table.EventTable { width: 100%; margin-bottom: 6pt; table-layout: fixed; } -table.EventTable td.IndentCell { width: 20pt; } -table.EventTable td.ContentCell { border-left: 1px solid #D9E2F3; padding-left: 0.08in; padding-right: 0.08in; } -span.InlineLabel { font-size: 10pt; letter-spacing:0.5pt; font-style: italic; } -span.InlineText { font-size: 9pt; } -p.CodeParagraph { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 8pt; margin-left: 5pt; padding: 2pt 5pt 2pt 5pt;; max-height: 200pt; max-width: 100%; overflow: auto; background-color: #F2F2F2; display: inline-block; white-space: pre; word-break: normal; } -p.BoldText { font-weight: bold; } -span.InternalLink { color: #2E74B5; text-decoration: underline; font-style: italic; } -span.InternalLink:hover { font-weight: bold; } -p.TenPoint { font-size: 10pt; } -p.EightPoint { font-size: 8pt; } -p.BaseFolder { text-decoration: underline; } -p.BaseFolder a { color: black; } -p.BaseFolder a:hover { color: #2E74B5; } -p.SpaceAfterTestParentOverviewParts { font-size: 1pt; margin-bottom:6pt; } -p.PieChartContainer { margin-top: 2pt; margin-bottom: 2pt; text-align: center; } -p.CommandWindowText { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 9pt; border: 1px solid #A6A6A6; padding-top: 1pt; padding-bottom: 1pt; padding-left: 4pt; padding-right: 4pt; max-height:400pt; overflow: auto; white-space: pre; word-break: normal; } -h1.CoverPageTitle { font-size: 36pt; text-align: center; } -table.CoverPageTable { margin-top: 10pt; width: 100%; table-layout: fixed; } -table.CoverPageTable p { font-size: 14pt; } -table.CoverPageTable td { padding-left: 6pt; padding-right: 6pt; vertical-align: top; } -table.CoverPageTable td.CoverPageTableLabel { width: 47%; } -table.CoverPageTable td.CoverPageTableLabel p { text-align: right; } -table.CoverPageTable td.CoverPageTableValue { width: 53%; } -p.TopMargin { margin-top: 20pt; } -p.DiagnosticLabel { font-size: 10pt; letter-spacing:0.5pt; font-style: italic; } -p.EventsLabel { } -p.FailureSummaryText { margin-bottom: 8pt; } -table.FailureSummaryTable { width: 100%; } -table.FailureSummaryTable td { padding-left: 6pt; padding-right: 6pt; } -table.FailureSummaryTable a { color: black; text-decoration: none; } -table.FailureSummaryTable a:hover { color: #2E74B5; text-decoration: underline; } -table.FailureSummaryTable td.FailureSummaryTableIndentColumn { width: 0.2in; } -table.FailureSummaryTable td.TestNameColumn { border-bottom: 1px solid #D0CECE; } -table.FailureSummaryTable td.ReasonsColumn { border-bottom: 1px solid #D0CECE; width: 1.6in; } -table.FailureSummaryTable td.DetailsLinkColumn { text-align: right; width: 0.75in; } -table.FailureSummaryTable tr.FailureSummaryRow p { margin-top: 3pt; } -p.FilterSummaryText { margin-bottom: 8pt; } -table.FilterSummaryTable { width: 100%; } -table.FilterSummaryTable td { padding-left: 6pt; padding-right: 6pt; } -table.FilterSummaryTable a { color: black; text-decoration: none; } -table.FilterSummaryTable a:hover { color: #2E74B5; text-decoration: underline; } -table.FilterSummaryTable td.FilteredSummaryTableIndentColumn { width: 0.2in; } -table.FilterSummaryTable td.TestNameColumn { border-bottom: 1px solid #D0CECE; } -table.FilterSummaryTable td.DetailsLinkColumn { text-align: right; width: 0.7in; } -table.FilterSummaryTable tr.FilterSummaryRow p { margin-top: 3pt; } -h1.Heading1 { font-size: 18pt; letter-spacing: 1pt; border-bottom: 1px solid #ED7D31; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; margin-bottom: 6pt; padding-left: 4pt; } -h2.Heading2 { font-size: 12pt; letter-spacing: 2pt; font-weight: bold; color: white; background-color: #4471C4; border-left: 8pt solid #4471C4; border-top: 4pt solid #4471C4; border-right: 8pt solid #4471C4; border-bottom: 4pt solid #4471C4; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; } -h3.Heading3 { font-size: 12pt; letter-spacing: 2pt; background-color: #D9E2F3; border-left: 8pt solid #D9E2F3; border-top: 4pt solid #D9E2F3; border-right: 8pt solid #D9E2F3; border-bottom: 4pt solid #D9E2F3; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; } -h4.Heading4 { font-size: 11pt; letter-spacing: 1pt; color: #2F5496; border-left: 1px dashed #4471C4; border-top: 1px dashed #4471C4; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; margin-bottom: 10pt; padding-top: 2pt; padding-left: 6pt; } -h5.Heading5 { font-size: 11pt; font-weight: bold; margin-top: 8pt; margin-bottom: 8pt; } -div.NavigationPane { padding: 0pt 10pt 25pt 10pt; position: fixed; right: 10pt; top: 0pt; border-radius: 0pt 0pt 10pt 10pt; z-index: 9999; margin-top: -34pt; background: #F0F0F0; width: 50pt; height: 50%; max-height: 30pt; border-style: solid; border-width: 0px 1px 1px 1px; border-color: #BBBBBB; } -div.NavigationPane.open { transition: all 0.5s ease; margin-top: 0pt; height: 50%; max-height: 50%; width: auto; max-width: 50%; } -div.NavigationBox { width: 100%; height: 100%; overflow: auto; border-width: 0px 0px 1px 0px; border-style: solid; border-color: #DDDDDD; padding-right: 10px; } -div.NavigationBox ul { font-size: 9pt; padding-left: 10pt; } -div.NavigationBox ul p { white-space: pre; word-break: normal; } -div.NavigationBox ul a { color: black; text-decoration: none; } -div.NavigationBox ul a:hover { color: #2E74B5; } -div.ArrowBox { height: 25pt; } -div.ArrowBox p { text-align: center; font-size: 18pt; color: #BBBBBB; } -div.ArrowBox:hover { cursor: pointer; } -div.ArrowBox:hover p { color: #2E74B5; } -::-webkit-scrollbar-corner { background: #F0F0F0; } -p.LeftArtifactImageParagraph { margin-top: 2pt; margin-bottom: 2pt; margin-left: 10pt; } -p.LeftArtifactImageParagraph img:hover { cursor: pointer; } -p.SingleCenteredHolePart { text-align: center; } -p.StackTextParagraph { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 7pt; margin-left: 5pt; padding: 2pt 5pt 2pt 5pt; max-height: 100pt; max-width: 100%; display: inline-block; overflow: auto; } -p.TestDetails { margin-bottom: 8pt; } -p.OverviewLinkParagraph { font-size: 8pt; text-align: right; } -table.TestParentBox { margin-top: 3pt; margin-bottom: 6pt; width: 100%; } -table.TestParentBox td.IndentCell { width:0.2in; } -table.TestParentBox td.TestParentNameCell { border-left:1px solid #E6E6E6; border-top: 1px solid #E6E6E6; margin-left: 3pt; margin-top: 1pt; } -table.TestParentBox td.TestParentNameCell p { text-decoration: underline; font-size: 10pt; } -table.TestParentBox td.TestParentNameCell a { color: black; } -table.TestParentBox td.TestParentNameCell a:hover { color: #2E74B5; } -table.TestParentBox td.TotalDurationTextCell { width: 1.2in; text-align: right; border-right:1px solid #E6E6E6; border-top: 1px solid #E6E6E6; margin-top: 1pt; margin-right: 3pt; } -table.TestParentBox td.TotalDurationTextCell p { font-size: 10pt; } -table.TestParentBox td.ResultsIconsCell { border-left: 1px solid #E6E6E6; border-right: 1px solid #E6E6E6; border-bottom: 1px solid #E6E6E6; margin-left: 3pt; margin-right: 3pt; margin-bottom: 1pt; } -table.TestParentBox td.ResultsIconsCell p { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 2pt; line-height: 4pt; } -table.TestParentBox td.ResultsIconsCell img:hover { transform: scale(1.75); transition: transform 0.2s ease; } -ul.EventSummaryText { margin: 0pt 0pt 0pt 20pt; list-style-type: circle; padding: 0pt; } -table.EventTable { width: 100%; margin-bottom: 6pt; table-layout: fixed; } -table.EventTable td.IndentCell { width: 20pt; } -table.EventTable td.ContentCell { border-left: 1px solid #D9E2F3; padding-left: 0.08in; padding-right: 0.08in; } -span.InlineLabel { font-size: 10pt; letter-spacing:0.5pt; font-style: italic; } -span.InlineText { font-size: 9pt; } -p.CodeParagraph { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 8pt; margin-left: 5pt; padding: 2pt 5pt 2pt 5pt;; max-height: 200pt; max-width: 100%; overflow: auto; background-color: #F2F2F2; display: inline-block; white-space: pre; word-break: normal; } -p.BoldText { font-weight: bold; } -span.InternalLink { color: #2E74B5; text-decoration: underline; font-style: italic; } -span.InternalLink:hover { font-weight: bold; } -p.TenPoint { font-size: 10pt; } -p.EightPoint { font-size: 8pt; } -p.BaseFolder { text-decoration: underline; } -p.BaseFolder a { color: black; } -p.BaseFolder a:hover { color: #2E74B5; } -p.SpaceAfterTestParentOverviewParts { font-size: 1pt; margin-bottom:6pt; } -p.PieChartContainer { margin-top: 2pt; margin-bottom: 2pt; text-align: center; } -p.CommandWindowText { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 9pt; border: 1px solid #A6A6A6; padding-top: 1pt; padding-bottom: 1pt; padding-left: 4pt; padding-right: 4pt; max-height:400pt; overflow: auto; white-space: pre; word-break: normal; } -h1.CoverPageTitle { font-size: 36pt; text-align: center; } -table.CoverPageTable { margin-top: 10pt; width: 100%; table-layout: fixed; } -table.CoverPageTable p { font-size: 14pt; } -table.CoverPageTable td { padding-left: 6pt; padding-right: 6pt; vertical-align: top; } -table.CoverPageTable td.CoverPageTableLabel { width: 47%; } -table.CoverPageTable td.CoverPageTableLabel p { text-align: right; } -table.CoverPageTable td.CoverPageTableValue { width: 53%; } -p.TopMargin { margin-top: 20pt; } -p.DiagnosticLabel { font-size: 10pt; letter-spacing:0.5pt; font-style: italic; } -p.EventsLabel { } -p.FailureSummaryText { margin-bottom: 8pt; } -table.FailureSummaryTable { width: 100%; } -table.FailureSummaryTable td { padding-left: 6pt; padding-right: 6pt; } -table.FailureSummaryTable a { color: black; text-decoration: none; } -table.FailureSummaryTable a:hover { color: #2E74B5; text-decoration: underline; } -table.FailureSummaryTable td.FailureSummaryTableIndentColumn { width: 0.2in; } -table.FailureSummaryTable td.TestNameColumn { border-bottom: 1px solid #D0CECE; } -table.FailureSummaryTable td.ReasonsColumn { border-bottom: 1px solid #D0CECE; width: 1.6in; } -table.FailureSummaryTable td.DetailsLinkColumn { text-align: right; width: 0.75in; } -table.FailureSummaryTable tr.FailureSummaryRow p { margin-top: 3pt; } -p.FilterSummaryText { margin-bottom: 8pt; } -table.FilterSummaryTable { width: 100%; } -table.FilterSummaryTable td { padding-left: 6pt; padding-right: 6pt; } -table.FilterSummaryTable a { color: black; text-decoration: none; } -table.FilterSummaryTable a:hover { color: #2E74B5; text-decoration: underline; } -table.FilterSummaryTable td.FilteredSummaryTableIndentColumn { width: 0.2in; } -table.FilterSummaryTable td.TestNameColumn { border-bottom: 1px solid #D0CECE; } -table.FilterSummaryTable td.DetailsLinkColumn { text-align: right; width: 0.7in; } -table.FilterSummaryTable tr.FilterSummaryRow p { margin-top: 3pt; } -h1.Heading1 { font-size: 18pt; letter-spacing: 1pt; border-bottom: 1px solid #ED7D31; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; margin-bottom: 6pt; padding-left: 4pt; } -h2.Heading2 { font-size: 12pt; letter-spacing: 2pt; font-weight: bold; color: white; background-color: #4471C4; border-left: 8pt solid #4471C4; border-top: 4pt solid #4471C4; border-right: 8pt solid #4471C4; border-bottom: 4pt solid #4471C4; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; } -h3.Heading3 { font-size: 12pt; letter-spacing: 2pt; background-color: #D9E2F3; border-left: 8pt solid #D9E2F3; border-top: 4pt solid #D9E2F3; border-right: 8pt solid #D9E2F3; border-bottom: 4pt solid #D9E2F3; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; } -h4.Heading4 { font-size: 11pt; letter-spacing: 1pt; color: #2F5496; border-left: 1px dashed #4471C4; border-top: 1px dashed #4471C4; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; margin-bottom: 10pt; padding-top: 2pt; padding-left: 6pt; } -h5.Heading5 { font-size: 11pt; font-weight: bold; margin-top: 8pt; margin-bottom: 8pt; } -div.NavigationPane { padding: 0pt 10pt 25pt 10pt; position: fixed; right: 10pt; top: 0pt; border-radius: 0pt 0pt 10pt 10pt; z-index: 9999; margin-top: -34pt; background: #F0F0F0; width: 50pt; height: 50%; max-height: 30pt; border-style: solid; border-width: 0px 1px 1px 1px; border-color: #BBBBBB; } -div.NavigationPane.open { transition: all 0.5s ease; margin-top: 0pt; height: 50%; max-height: 50%; width: auto; max-width: 50%; } -div.NavigationBox { width: 100%; height: 100%; overflow: auto; border-width: 0px 0px 1px 0px; border-style: solid; border-color: #DDDDDD; padding-right: 10px; } -div.NavigationBox ul { font-size: 9pt; padding-left: 10pt; } -div.NavigationBox ul p { white-space: pre; word-break: normal; } -div.NavigationBox ul a { color: black; text-decoration: none; } -div.NavigationBox ul a:hover { color: #2E74B5; } -div.ArrowBox { height: 25pt; } -div.ArrowBox p { text-align: center; font-size: 18pt; color: #BBBBBB; } -div.ArrowBox:hover { cursor: pointer; } -div.ArrowBox:hover p { color: #2E74B5; } -::-webkit-scrollbar-corner { background: #F0F0F0; } -p.LeftArtifactImageParagraph { margin-top: 2pt; margin-bottom: 2pt; margin-left: 10pt; } -p.LeftArtifactImageParagraph img:hover { cursor: pointer; } -p.SingleCenteredHolePart { text-align: center; } -p.StackTextParagraph { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 7pt; margin-left: 5pt; padding: 2pt 5pt 2pt 5pt; max-height: 100pt; max-width: 100%; display: inline-block; overflow: auto; } -p.TestDetails { margin-bottom: 8pt; } -p.OverviewLinkParagraph { font-size: 8pt; text-align: right; } -table.TestParentBox { margin-top: 3pt; margin-bottom: 6pt; width: 100%; } -table.TestParentBox td.IndentCell { width:0.2in; } -table.TestParentBox td.TestParentNameCell { border-left:1px solid #E6E6E6; border-top: 1px solid #E6E6E6; margin-left: 3pt; margin-top: 1pt; } -table.TestParentBox td.TestParentNameCell p { text-decoration: underline; font-size: 10pt; } -table.TestParentBox td.TestParentNameCell a { color: black; } -table.TestParentBox td.TestParentNameCell a:hover { color: #2E74B5; } -table.TestParentBox td.TotalDurationTextCell { width: 1.2in; text-align: right; border-right:1px solid #E6E6E6; border-top: 1px solid #E6E6E6; margin-top: 1pt; margin-right: 3pt; } -table.TestParentBox td.TotalDurationTextCell p { font-size: 10pt; } -table.TestParentBox td.ResultsIconsCell { border-left: 1px solid #E6E6E6; border-right: 1px solid #E6E6E6; border-bottom: 1px solid #E6E6E6; margin-left: 3pt; margin-right: 3pt; margin-bottom: 1pt; } -table.TestParentBox td.ResultsIconsCell p { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 2pt; line-height: 4pt; } -table.TestParentBox td.ResultsIconsCell img:hover { transform: scale(1.75); transition: transform 0.2s ease; } -ul.EventSummaryText { margin: 0pt 0pt 0pt 20pt; list-style-type: circle; padding: 0pt; } -table.EventTable { width: 100%; margin-bottom: 6pt; table-layout: fixed; } -table.EventTable td.IndentCell { width: 20pt; } -table.EventTable td.ContentCell { border-left: 1px solid #D9E2F3; padding-left: 0.08in; padding-right: 0.08in; } -span.InlineLabel { font-size: 10pt; letter-spacing:0.5pt; font-style: italic; } -span.InlineText { font-size: 9pt; } -p.CodeParagraph { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 8pt; margin-left: 5pt; padding: 2pt 5pt 2pt 5pt;; max-height: 200pt; max-width: 100%; overflow: auto; background-color: #F2F2F2; display: inline-block; white-space: pre; word-break: normal; } -p.BoldText { font-weight: bold; } -span.InternalLink { color: #2E74B5; text-decoration: underline; font-style: italic; } -span.InternalLink:hover { font-weight: bold; } -p.TenPoint { font-size: 10pt; } -p.EightPoint { font-size: 8pt; } -p.BaseFolder { text-decoration: underline; } -p.BaseFolder a { color: black; } -p.BaseFolder a:hover { color: #2E74B5; } -p.SpaceAfterTestParentOverviewParts { font-size: 1pt; margin-bottom:6pt; } -p.PieChartContainer { margin-top: 2pt; margin-bottom: 2pt; text-align: center; } -p.CommandWindowText { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 9pt; border: 1px solid #A6A6A6; padding-top: 1pt; padding-bottom: 1pt; padding-left: 4pt; padding-right: 4pt; max-height:400pt; overflow: auto; white-space: pre; word-break: normal; } -h1.CoverPageTitle { font-size: 36pt; text-align: center; } -table.CoverPageTable { margin-top: 10pt; width: 100%; table-layout: fixed; } -table.CoverPageTable p { font-size: 14pt; } -table.CoverPageTable td { padding-left: 6pt; padding-right: 6pt; vertical-align: top; } -table.CoverPageTable td.CoverPageTableLabel { width: 47%; } -table.CoverPageTable td.CoverPageTableLabel p { text-align: right; } -table.CoverPageTable td.CoverPageTableValue { width: 53%; } -p.TopMargin { margin-top: 20pt; } -p.DiagnosticLabel { font-size: 10pt; letter-spacing:0.5pt; font-style: italic; } -p.EventsLabel { } -p.FailureSummaryText { margin-bottom: 8pt; } -table.FailureSummaryTable { width: 100%; } -table.FailureSummaryTable td { padding-left: 6pt; padding-right: 6pt; } -table.FailureSummaryTable a { color: black; text-decoration: none; } -table.FailureSummaryTable a:hover { color: #2E74B5; text-decoration: underline; } -table.FailureSummaryTable td.FailureSummaryTableIndentColumn { width: 0.2in; } -table.FailureSummaryTable td.TestNameColumn { border-bottom: 1px solid #D0CECE; } -table.FailureSummaryTable td.ReasonsColumn { border-bottom: 1px solid #D0CECE; width: 1.6in; } -table.FailureSummaryTable td.DetailsLinkColumn { text-align: right; width: 0.75in; } -table.FailureSummaryTable tr.FailureSummaryRow p { margin-top: 3pt; } -p.FilterSummaryText { margin-bottom: 8pt; } -table.FilterSummaryTable { width: 100%; } -table.FilterSummaryTable td { padding-left: 6pt; padding-right: 6pt; } -table.FilterSummaryTable a { color: black; text-decoration: none; } -table.FilterSummaryTable a:hover { color: #2E74B5; text-decoration: underline; } -table.FilterSummaryTable td.FilteredSummaryTableIndentColumn { width: 0.2in; } -table.FilterSummaryTable td.TestNameColumn { border-bottom: 1px solid #D0CECE; } -table.FilterSummaryTable td.DetailsLinkColumn { text-align: right; width: 0.7in; } -table.FilterSummaryTable tr.FilterSummaryRow p { margin-top: 3pt; } -h1.Heading1 { font-size: 18pt; letter-spacing: 1pt; border-bottom: 1px solid #ED7D31; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; margin-bottom: 6pt; padding-left: 4pt; } -h2.Heading2 { font-size: 12pt; letter-spacing: 2pt; font-weight: bold; color: white; background-color: #4471C4; border-left: 8pt solid #4471C4; border-top: 4pt solid #4471C4; border-right: 8pt solid #4471C4; border-bottom: 4pt solid #4471C4; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; } -h3.Heading3 { font-size: 12pt; letter-spacing: 2pt; background-color: #D9E2F3; border-left: 8pt solid #D9E2F3; border-top: 4pt solid #D9E2F3; border-right: 8pt solid #D9E2F3; border-bottom: 4pt solid #D9E2F3; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; } -h4.Heading4 { font-size: 11pt; letter-spacing: 1pt; color: #2F5496; border-left: 1px dashed #4471C4; border-top: 1px dashed #4471C4; margin-left: -6pt; margin-right: -6pt; margin-top: 10pt; margin-bottom: 10pt; padding-top: 2pt; padding-left: 6pt; } -h5.Heading5 { font-size: 11pt; font-weight: bold; margin-top: 8pt; margin-bottom: 8pt; } -div.NavigationPane { padding: 0pt 10pt 25pt 10pt; position: fixed; right: 10pt; top: 0pt; border-radius: 0pt 0pt 10pt 10pt; z-index: 9999; margin-top: -34pt; background: #F0F0F0; width: 50pt; height: 50%; max-height: 30pt; border-style: solid; border-width: 0px 1px 1px 1px; border-color: #BBBBBB; } -div.NavigationPane.open { transition: all 0.5s ease; margin-top: 0pt; height: 50%; max-height: 50%; width: auto; max-width: 50%; } -div.NavigationBox { width: 100%; height: 100%; overflow: auto; border-width: 0px 0px 1px 0px; border-style: solid; border-color: #DDDDDD; padding-right: 10px; } -div.NavigationBox ul { font-size: 9pt; padding-left: 10pt; } -div.NavigationBox ul p { white-space: pre; word-break: normal; } -div.NavigationBox ul a { color: black; text-decoration: none; } -div.NavigationBox ul a:hover { color: #2E74B5; } -div.ArrowBox { height: 25pt; } -div.ArrowBox p { text-align: center; font-size: 18pt; color: #BBBBBB; } -div.ArrowBox:hover { cursor: pointer; } -div.ArrowBox:hover p { color: #2E74B5; } -::-webkit-scrollbar-corner { background: #F0F0F0; } -p.LeftArtifactImageParagraph { margin-top: 2pt; margin-bottom: 2pt; margin-left: 10pt; } -p.LeftArtifactImageParagraph img:hover { cursor: pointer; } -p.SingleCenteredHolePart { text-align: center; } -p.StackTextParagraph { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 7pt; margin-left: 5pt; padding: 2pt 5pt 2pt 5pt; max-height: 100pt; max-width: 100%; display: inline-block; overflow: auto; } -p.TestDetails { margin-bottom: 8pt; } -p.OverviewLinkParagraph { font-size: 8pt; text-align: right; } -table.TestParentBox { margin-top: 3pt; margin-bottom: 6pt; width: 100%; } -table.TestParentBox td.IndentCell { width:0.2in; } -table.TestParentBox td.TestParentNameCell { border-left:1px solid #E6E6E6; border-top: 1px solid #E6E6E6; margin-left: 3pt; margin-top: 1pt; } -table.TestParentBox td.TestParentNameCell p { text-decoration: underline; font-size: 10pt; } -table.TestParentBox td.TestParentNameCell a { color: black; } -table.TestParentBox td.TestParentNameCell a:hover { color: #2E74B5; } -table.TestParentBox td.TotalDurationTextCell { width: 1.2in; text-align: right; border-right:1px solid #E6E6E6; border-top: 1px solid #E6E6E6; margin-top: 1pt; margin-right: 3pt; } -table.TestParentBox td.TotalDurationTextCell p { font-size: 10pt; } -table.TestParentBox td.ResultsIconsCell { border-left: 1px solid #E6E6E6; border-right: 1px solid #E6E6E6; border-bottom: 1px solid #E6E6E6; margin-left: 3pt; margin-right: 3pt; margin-bottom: 1pt; } -table.TestParentBox td.ResultsIconsCell p { font-family: 'Courier New', 'Noto Sans Mono CJK JP', 'Noto Sans Mono CJK KR', 'Noto Sans Mono CJK SC', 'Noto Sans Mono CJK TC', 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, 'Noto Mono, Noto Sans CJK JP, Noto Sans CJK SC, Noto Sans CJK KR'; font-size: 2pt; line-height: 4pt; } -table.TestParentBox td.ResultsIconsCell img:hover { transform: scale(1.75); transition: transform 0.2s ease; } diff --git a/report/stylesheets/root.css b/report/stylesheets/root.css deleted file mode 100644 index 8bdb6f6..0000000 --- a/report/stylesheets/root.css +++ /dev/null @@ -1,19 +0,0 @@ -p { - font-family: 'Calibri Light', Calibri, Segoe, Optima, Arial, 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, rg-body; - font-size: 11pt; - white-space: pre-wrap; - word-break: break-word; - margin: 0px; -} -div.PageContainer { - padding:20pt; - margin: auto; - min-width:7.5in; -} -h1, h2, h3, h4, h5, h6 { - font-family: 'Calibri Light', Calibri, Segoe, Optima, Arial, 'Noto Sans CJK JP', 'Noto Sans CJK KR', 'Noto Sans CJK SC', 'Noto Sans CJK TC', 'Malgun Gothic', Mona, Osaka, 'Hiragino Kaku Gothic Pro', Meiryo, rg-title; - font-weight: normal; - white-space: pre; - word-break: break-word; - margin: 0px; -} \ No newline at end of file diff --git a/report/test-results.xml b/report/test-results.xml deleted file mode 100644 index 8e70131..0000000 --- a/report/test-results.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/report/testreport.html b/report/testreport.html deleted file mode 100644 index 4777686..0000000 --- a/report/testreport.html +++ /dev/null @@ -1,250 +0,0 @@ - - - - - - - - - - -
- - -

- -

MATLABĀ® Test Report

- - - - - - - - - - - - - - - - - -
-

Timestamp:

-
-

19-Apr-2023 15:30:08

-
-

Host:

-
-

MATHWORKS-Zz8wx

-
-

Platform:

-
-

win64

-
-

MATLAB Version:

-
-

9.14.0.2206163 (R2023a)

-
- - - - - - - - - -
-

Number of Tests:

-
-

4

-
-

Testing Time:

-
-

63.7591 seconds

-
- - - - - -
-

Overall Result:

-
-

PASSED

-
- -

- - - - -

Overview

- -

C:\Users\esmithzb\OneDrive - MathWorks\Scripts\Curriculum Modules\Mathematics\Calculus-Integrals\tests\

- - - - - - - - - - - -
-

-
-

smokeTests

-
-

63.7591 seconds

-
-

-
-

-
- -

- - - - -

Details

- - -

C:\Users\esmithzb\OneDrive - MathWorks\Scripts\Curriculum Modules\Mathematics\Calculus-Integrals\tests\

- - -

smokeTests

- - -

runMemory

- -

The test passed. -Duration: 34.1816 seconds

- -

(Overview)

- - - - -

runNumericDataTypes

- -

The test passed. -Duration: 6.0504 seconds

- -

(Overview)

- - - - -

runStoringData

- -

The test passed. -Duration: 19.9971 seconds

- -

(Overview)

- - - - -

runStrings

- -

The test passed. -Duration: 3.5300 seconds

- -

(Overview)

- - - - - - - - - - -
- - \ No newline at end of file diff --git a/resources/project/6xhH2l9GP9loT6TdFn_Mo65sDHg/P8PSrqcBHMbGhqD2r1d9oc0h3TUd.xml b/resources/project/6xhH2l9GP9loT6TdFn_Mo65sDHg/P8PSrqcBHMbGhqD2r1d9oc0h3TUd.xml new file mode 100644 index 0000000..ff2009c --- /dev/null +++ b/resources/project/6xhH2l9GP9loT6TdFn_Mo65sDHg/P8PSrqcBHMbGhqD2r1d9oc0h3TUd.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/6xhH2l9GP9loT6TdFn_Mo65sDHg/P8PSrqcBHMbGhqD2r1d9oc0h3TUp.xml b/resources/project/6xhH2l9GP9loT6TdFn_Mo65sDHg/P8PSrqcBHMbGhqD2r1d9oc0h3TUp.xml new file mode 100644 index 0000000..3b8316b --- /dev/null +++ b/resources/project/6xhH2l9GP9loT6TdFn_Mo65sDHg/P8PSrqcBHMbGhqD2r1d9oc0h3TUp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/8qVyd5N_fhnL7ByIxKBpTEI8wmId.xml b/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/8qVyd5N_fhnL7ByIxKBpTEI8wmId.xml new file mode 100644 index 0000000..31836f0 --- /dev/null +++ b/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/8qVyd5N_fhnL7ByIxKBpTEI8wmId.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/8qVyd5N_fhnL7ByIxKBpTEI8wmIp.xml b/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/8qVyd5N_fhnL7ByIxKBpTEI8wmIp.xml new file mode 100644 index 0000000..b4aec5e --- /dev/null +++ b/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/8qVyd5N_fhnL7ByIxKBpTEI8wmIp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/uIYthjUuDNIiVXAl0s2ACeCA7XYd.xml b/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/uIYthjUuDNIiVXAl0s2ACeCA7XYd.xml deleted file mode 100644 index 57d8832..0000000 --- a/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/uIYthjUuDNIiVXAl0s2ACeCA7XYd.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/uIYthjUuDNIiVXAl0s2ACeCA7XYp.xml b/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/uIYthjUuDNIiVXAl0s2ACeCA7XYp.xml deleted file mode 100644 index c132d44..0000000 --- a/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/uIYthjUuDNIiVXAl0s2ACeCA7XYp.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/xcK8fO1pjra5DR0jot5vrzlBV84d.xml b/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/xcK8fO1pjra5DR0jot5vrzlBV84d.xml index 50f7fa8..dc157b3 100644 --- a/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/xcK8fO1pjra5DR0jot5vrzlBV84d.xml +++ b/resources/project/KAXfQgCar2Yb8zOxgvf9hdmLP1E/xcK8fO1pjra5DR0jot5vrzlBV84d.xml @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/resources/project/WZRuNzqc-Db7NcQAZO8Y-R8U9cc/66WgGCcF5RIH9MCEgPmgjZK9k3Ud.xml b/resources/project/WZRuNzqc-Db7NcQAZO8Y-R8U9cc/66WgGCcF5RIH9MCEgPmgjZK9k3Ud.xml deleted file mode 100644 index 609caf9..0000000 --- a/resources/project/WZRuNzqc-Db7NcQAZO8Y-R8U9cc/66WgGCcF5RIH9MCEgPmgjZK9k3Ud.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/resources/project/WZRuNzqc-Db7NcQAZO8Y-R8U9cc/66WgGCcF5RIH9MCEgPmgjZK9k3Up.xml b/resources/project/WZRuNzqc-Db7NcQAZO8Y-R8U9cc/66WgGCcF5RIH9MCEgPmgjZK9k3Up.xml deleted file mode 100644 index 5644fc9..0000000 --- a/resources/project/WZRuNzqc-Db7NcQAZO8Y-R8U9cc/66WgGCcF5RIH9MCEgPmgjZK9k3Up.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/resources/project/WZRuNzqc-Db7NcQAZO8Y-R8U9cc/AtMjXDrOSm8YDv3_4UFXiyrWqNEd.xml b/resources/project/WZRuNzqc-Db7NcQAZO8Y-R8U9cc/AtMjXDrOSm8YDv3_4UFXiyrWqNEd.xml deleted file mode 100644 index 609caf9..0000000 --- a/resources/project/WZRuNzqc-Db7NcQAZO8Y-R8U9cc/AtMjXDrOSm8YDv3_4UFXiyrWqNEd.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/resources/project/WZRuNzqc-Db7NcQAZO8Y-R8U9cc/AtMjXDrOSm8YDv3_4UFXiyrWqNEp.xml b/resources/project/WZRuNzqc-Db7NcQAZO8Y-R8U9cc/AtMjXDrOSm8YDv3_4UFXiyrWqNEp.xml deleted file mode 100644 index 21c5916..0000000 --- a/resources/project/WZRuNzqc-Db7NcQAZO8Y-R8U9cc/AtMjXDrOSm8YDv3_4UFXiyrWqNEp.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/resources/project/iMwdHOXOBiBXhnA_li8gtEJVTjc/nGmc4yUWSwVpS8w8tP7IolwQs0Ed.xml b/resources/project/iMwdHOXOBiBXhnA_li8gtEJVTjc/nGmc4yUWSwVpS8w8tP7IolwQs0Ed.xml deleted file mode 100644 index 7a6326b..0000000 --- a/resources/project/iMwdHOXOBiBXhnA_li8gtEJVTjc/nGmc4yUWSwVpS8w8tP7IolwQs0Ed.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/resources/project/iMwdHOXOBiBXhnA_li8gtEJVTjc/nGmc4yUWSwVpS8w8tP7IolwQs0Ep.xml b/resources/project/iMwdHOXOBiBXhnA_li8gtEJVTjc/nGmc4yUWSwVpS8w8tP7IolwQs0Ep.xml deleted file mode 100644 index 371b133..0000000 --- a/resources/project/iMwdHOXOBiBXhnA_li8gtEJVTjc/nGmc4yUWSwVpS8w8tP7IolwQs0Ep.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/resources/project/iMwdHOXOBiBXhnA_li8gtEJVTjc/yXVzJ0Z2K6mmnDw3G3plJnVZDe4d.xml b/resources/project/iMwdHOXOBiBXhnA_li8gtEJVTjc/yXVzJ0Z2K6mmnDw3G3plJnVZDe4d.xml deleted file mode 100644 index a75f7a8..0000000 --- a/resources/project/iMwdHOXOBiBXhnA_li8gtEJVTjc/yXVzJ0Z2K6mmnDw3G3plJnVZDe4d.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/resources/project/iMwdHOXOBiBXhnA_li8gtEJVTjc/yXVzJ0Z2K6mmnDw3G3plJnVZDe4p.xml b/resources/project/iMwdHOXOBiBXhnA_li8gtEJVTjc/yXVzJ0Z2K6mmnDw3G3plJnVZDe4p.xml deleted file mode 100644 index 3ac6595..0000000 --- a/resources/project/iMwdHOXOBiBXhnA_li8gtEJVTjc/yXVzJ0Z2K6mmnDw3G3plJnVZDe4p.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/resources/project/root/6xhH2l9GP9loT6TdFn_Mo65sDHgp.xml b/resources/project/root/6xhH2l9GP9loT6TdFn_Mo65sDHgp.xml new file mode 100644 index 0000000..b1ca35e --- /dev/null +++ b/resources/project/root/6xhH2l9GP9loT6TdFn_Mo65sDHgp.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/resources/project/yXVzJ0Z2K6mmnDw3G3plJnVZDe4/K1TsyesrqZcEZbAZQOaQ1iJ7MeQd.xml b/resources/project/yXVzJ0Z2K6mmnDw3G3plJnVZDe4/K1TsyesrqZcEZbAZQOaQ1iJ7MeQd.xml deleted file mode 100644 index 7a6326b..0000000 --- a/resources/project/yXVzJ0Z2K6mmnDw3G3plJnVZDe4/K1TsyesrqZcEZbAZQOaQ1iJ7MeQd.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/resources/project/yXVzJ0Z2K6mmnDw3G3plJnVZDe4/K1TsyesrqZcEZbAZQOaQ1iJ7MeQp.xml b/resources/project/yXVzJ0Z2K6mmnDw3G3plJnVZDe4/K1TsyesrqZcEZbAZQOaQ1iJ7MeQp.xml deleted file mode 100644 index 43bf722..0000000 --- a/resources/project/yXVzJ0Z2K6mmnDw3G3plJnVZDe4/K1TsyesrqZcEZbAZQOaQ1iJ7MeQp.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/resources/project/yXVzJ0Z2K6mmnDw3G3plJnVZDe4/aLGy9tre_fdbb9aoMxczc3X2FBsd.xml b/resources/project/yXVzJ0Z2K6mmnDw3G3plJnVZDe4/aLGy9tre_fdbb9aoMxczc3X2FBsd.xml deleted file mode 100644 index 7a6326b..0000000 --- a/resources/project/yXVzJ0Z2K6mmnDw3G3plJnVZDe4/aLGy9tre_fdbb9aoMxczc3X2FBsd.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - \ No newline at end of file diff --git a/resources/project/yXVzJ0Z2K6mmnDw3G3plJnVZDe4/aLGy9tre_fdbb9aoMxczc3X2FBsp.xml b/resources/project/yXVzJ0Z2K6mmnDw3G3plJnVZDe4/aLGy9tre_fdbb9aoMxczc3X2FBsp.xml deleted file mode 100644 index 05602ab..0000000 --- a/resources/project/yXVzJ0Z2K6mmnDw3G3plJnVZDe4/aLGy9tre_fdbb9aoMxczc3X2FBsp.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/resources/project/yXVzJ0Z2K6mmnDw3G3plJnVZDe4/uLV4Rxy0vMzP1RZDoF2ifhQupTEd.xml b/resources/project/yXVzJ0Z2K6mmnDw3G3plJnVZDe4/uLV4Rxy0vMzP1RZDoF2ifhQupTEd.xml deleted file mode 100644 index a75f7a8..0000000 --- a/resources/project/yXVzJ0Z2K6mmnDw3G3plJnVZDe4/uLV4Rxy0vMzP1RZDoF2ifhQupTEd.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/resources/project/yXVzJ0Z2K6mmnDw3G3plJnVZDe4/uLV4Rxy0vMzP1RZDoF2ifhQupTEp.xml b/resources/project/yXVzJ0Z2K6mmnDw3G3plJnVZDe4/uLV4Rxy0vMzP1RZDoF2ifhQupTEp.xml deleted file mode 100644 index 842de6a..0000000 --- a/resources/project/yXVzJ0Z2K6mmnDw3G3plJnVZDe4/uLV4Rxy0vMzP1RZDoF2ifhQupTEp.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file